Project 5¶

OCR Testing¶

In [72]:
import os
import numpy as np
import matplotlib.pyplot as plt

# Returns the num channels for a passed in image np ndarray
def get_num_channels(img):
  # Check for grayscale
  if len(img.shape) < 3:
    return 1

  return img.shape[-1]

# Convert images to grayscale and print shape
def convert_grayscale(image):
  weights = [0.3, 0.6, 0.1]

  channels = get_num_channels(image)
  if channels == 1: # Grayscale
    return image
  elif channels == 3: # RGB
    return (image @ weights) / 255.0
  elif channels == 4: # ARGB
    # Only use the first 3 channels
    return (image[:,:,:3] @ weights) /255.0

Load images and preprocess images and labels. I have labels and labels with spaces for each of the test images. I also tested with a few images on my own.

In [73]:
# Create the output path so project is organized better
OUTPUT_PATH = './output_images/'
if not os.path.exists(OUTPUT_PATH):
  os.makedirs(OUTPUT_PATH)


def read_images_grayscale(filenames, path):
  images = []
  for fname in filenames:
    image = plt.imread(f'{path}/{fname}')
    print(f'{fname}')
    print(f'shape: {image.shape}')
    print(f'max: {image.max()}')
    print(f'min: {image.min()}')
    
    # Convert images to grayscale
    gs_image = convert_grayscale(image)
    print(f'shape after grayscale conversion: {gs_image.shape}')
    print()

    images.append(gs_image)
    
  return images

def read_labels(filenames, path):
  labels = []
  for fname in filenames:
    with open(f'{path}/{fname}') as f:
      l = f.read().upper()
      print(l)
      labels.append(l)
    
  return labels

# Read in images
PATH = './example_images'
filenames = [
    'a.png',
    'b.png',
    'c.png',
    'd.png',
    'e.png',
    'f.png',
    'g.png',
]

images = read_images_grayscale(filenames, PATH)

TEST_PATH = './test_images'
test_filenames = [
    'msg_from_annie.png',
    'utes.png',
    'dreams.png',
    'moment.png',
    'noisy_one_paragraph.jpg',
    'noisy_one_sentence.jpg',
    'noisy_three_sentences.jpg',
]

test_filenames_png = [x.replace('.jpg', '.png') for x in test_filenames]

test_labels_fnames = [
    'msg_from_annie.txt',
    'utes.txt',
    'dreams.txt',
    'moment.txt',
    'noisy_one_paragraph.txt',
    'noisy_one_sentence.txt',
    'noisy_three_sentences.txt',
]
test_labels_spaces_fnames = [
    'msg_from_annie_spaces.txt',
    'utes_spaces.txt',
    'dreams_spaces.txt',
    'moment_spaces.txt',
    'noisy_one_paragraph_spaces.txt',
    'noisy_one_sentence_spaces.txt',
    'noisy_three_sentences_spaces.txt',
]

test_images = read_images_grayscale(test_filenames, TEST_PATH)

print('\nLabels:\n')
test_labels = read_labels(test_labels_fnames, TEST_PATH)

print('\n\nLabels with spaces:\n')
test_labels_spaces = read_labels(test_labels_spaces_fnames, TEST_PATH)
a.png
shape: (28, 28, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (28, 28)

b.png
shape: (28, 28, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (28, 28)

c.png
shape: (28, 28, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (28, 28)

d.png
shape: (28, 28, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (28, 28)

e.png
shape: (28, 28, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (28, 28)

f.png
shape: (28, 28, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (28, 28)

g.png
shape: (28, 28, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (28, 28)

msg_from_annie.png
shape: (1010, 1639, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (1010, 1639)

utes.png
shape: (520, 1612, 3)
max: 1.0
min: 0.0
shape after grayscale conversion: (520, 1612)

dreams.png
shape: (243, 772, 4)
max: 1.0
min: 0.12941177189350128
shape after grayscale conversion: (243, 772)

moment.png
shape: (460, 855, 4)
max: 1.0
min: 0.0
shape after grayscale conversion: (460, 855)

noisy_one_paragraph.jpg
shape: (1153, 2602, 3)
max: 255
min: 0
shape after grayscale conversion: (1153, 2602)

noisy_one_sentence.jpg
shape: (198, 2314, 3)
max: 255
min: 0
shape after grayscale conversion: (198, 2314)

noisy_three_sentences.jpg
shape: (919, 2620, 3)
max: 255
min: 0
shape after grayscale conversion: (919, 2620)


Labels:

BESURETODRINKYOUROVALTINE
GOUTES
DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION
EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH
LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH
YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED
ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS


Labels with spaces:

BE SURE TO DRINK YOUR OVALTINE
GO UTES
DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION
EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH
LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH
YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED
ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS

Display the images. You can see the preprocessed letters and sentence images below.

In [74]:
def display_images(imgs, filenames, fig_name):
  rows = int(np.ceil(len(images) / 4))
  fig, axs = plt.subplots(rows,4, figsize=(rows*4,4))
  fig.tight_layout()
  for i, axe in enumerate(axs):
    for j, ax in enumerate(axe):
      idx = (i*4) + j
      if idx < len(imgs):
        ax.imshow(imgs[idx], cmap='gray')
        ax.set_title(filenames[idx])

  plt.suptitle('Letters')
  plt.tight_layout()
  plt.savefig(f'{OUTPUT_PATH}' + fig_name)

display_images(images, filenames, 'gs_images.png')
display_images(test_images, test_filenames, 'gs_test_images.png')
No description has been provided for this image
No description has been provided for this image

1. Extract Individual Characters¶

I used approved skimage functions as part of my logic in order to extract individual characters.

  • Preprocess by denoising the images.

    In order to denoise the images, I used skimage denoise methods and tested different methods and parameters to see what worked best for denoising the images. 
  • Mask the image into foreground/background pixels using an authomatically defined threshold.

    In order to do the masking on the image, I used skimage otsu thresholding function. This returns the threshold value to use and then I threshold at this value and display the thresholded image below.
  • Extract connected components of the image. In this step you need to record the connected components which are the image characters. Also, since the order matters, you need to compare the center of each connected region to track the relative locations of consecutive characters.

    In order to do the connected components, I used the skimage label and regionprops functions. I only look at connected components that are of a certain size (greater than 30 pixels), and I take the centroid of this connected component to use as the center of the connected region. I track that center in order to implement the "Recognize spaces" function later on. I extract the images for the connected components to use as input the model.

I then display the original, denoised, thresholded, and character centers for multiple images. You can see below that this method works extremely well for the handwritten examples including my additional examples. It also does a good job on the sentence. It's interesting to note the differences between the handwritten examples and the typed examples. It tends to do better on the handwritten examples than it does on the typed examples, but it still does a good job overall. It does a good job on the handwritten like typed "dreams" example below and also my "every beginning" handwritten example below.

In [86]:
from skimage.restoration import denoise_bilateral
from skimage.filters import threshold_otsu
from skimage.measure import label
from skimage.measure import regionprops

def extract_individual_characters(img, display=True, fname=''):
  
  fig, axs = None, None
  if display:
    fig, axs = plt.subplots(1, 4, figsize=(16,3))
    
    axs[0].imshow(img, cmap='gray')
    axs[0].set_title('Original')
  
  # denoise the images using skimage funcs
  denoised_img = denoise_bilateral(img, bins=750000)
  if display:
    axs[1].imshow(denoised_img, cmap='gray')
    axs[1].set_title('Denoised')
  
  # automatically threshold image using otsu thresholding to forground and background pixels
  threshold_val = threshold_otsu(denoised_img)
  # print(f'threshold_val: {threshold_val}')
  thresholded_img = denoised_img <= threshold_val
  if display:
    axs[2].imshow(thresholded_img, cmap='gray')
    axs[2].set_title('Thresholded')

  # get connected components using skimage label and regionprops
  cc_labels, num_labels = label(thresholded_img, return_num=True, connectivity=2)
  # print(f'total labels: {num_labels}')
  props = regionprops(cc_labels)
  
  letter_props = []
  centers = []
  char_images = []
  
  for prop in props:
    # So really most of these cc's are tiny, ignore the tiny ones
    if prop.num_pixels > 30:
      letter_props.append(prop)
      centers.append(prop.centroid)
      char_images.append(prop.image)
    
  # print(f'total labels after filtering by num pixels: {len(letter_props)}')
  # print(centers)
  
  if display:
    axs[3].imshow(thresholded_img)
    axs[3].set_title('Centers')
    for c in centers:
      # channels
      axs[3].plot(c[1],c[0],'bo')
    
    plt.suptitle('Extract individual characters')
    plt.tight_layout()
    if fname != '':
      plt.savefig(f'{OUTPUT_PATH}extract_individual_characters_{fname}')
  
  # for char_image in char_images:
  #   plt.figure()
  #   plt.imshow(char_image, cmap='gray')
  #   plt.show()
  
  return char_images, centers
  

char_images, centers = extract_individual_characters(test_images[2], True, fname=test_filenames_png[2])
char_images, centers = extract_individual_characters(test_images[3], True, fname=test_filenames_png[3])
char_images, centers = extract_individual_characters(test_images[4], True, fname=test_filenames_png[4])
char_images, centers = extract_individual_characters(test_images[0], True, fname=test_filenames_png[0])
char_images, centers = extract_individual_characters(test_images[1], True, fname=test_filenames_png[1])
char_images, centers = extract_individual_characters(test_images[5], True, fname=test_filenames_png[5])
char_images, centers = extract_individual_characters(test_images[6], True, fname=test_filenames_png[6])

    
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

2. Classifying Characters¶

I used/modified the class in predict.py so I could use it as needed to load the pretrained neural network and classify each character. In the first cell below, I use the CharacterPredictor class and do simple predictions on the example images, which are just simple letters. You can see the images and predictions below.

In [76]:
""" 
defines predictor class
"""

import string
from typing import Union, Optional
from numpy import ndarray
from torch import Tensor, load, from_numpy, unsqueeze, squeeze, float32
from torch import device as _device
from torch.nn import Conv2d
from torchvision.models import resnet50
from skimage import io


class CharacterPredictor:
    """Initialize a CharacterPredictor instance with a pretrained model

    Parameters
    ----------
    model_path : str
        Model file name, e.g. `model.pth`.
    device : str, torch.device, optional
        device where model will be ran on. default "cpu".

    """

    def __init__(self, model_path: str, device: Optional[Union[str, _device]] = "cpu"):
        self.device = device

        # initialize model
        self.model = resnet50()
        self.model.conv1 = Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
        self.model.load_state_dict(load(model_path, map_location="cpu"))
        self.model.to(self.device)

        self.model.eval()

    def predict(self, char_image: Union[ndarray, Tensor]):
        """Predict a character from an image.

        Parameters
        ----------
        char_image : np.ndarray or torch.Tensor
            28x28 image of a character with 0 background (black)

        Returns
        -------
        predicted_char : str
            Predicted output of model as a capital character
            e.g. "A".

        """

        # check if char_image is of the right type and shape
        if isinstance(char_image, ndarray):
            char_image = from_numpy(char_image)
        elif not isinstance(char_image, Tensor):
            raise TypeError(
                f"expected image of type np.ndarray instead got {type(char_image)}"
            )
        if char_image.shape != (28, 28):
            raise ValueError(
                f"expected image of shape (28, 28), instead got {char_image.shape}"
            )

        # convert to 4D (batch, channels, x, y) and change type
        char_image = unsqueeze(unsqueeze(char_image, 0), 0)
        char_image = char_image.to(device=self.device, dtype=float32)

        # make prediction
        pred = self.model(char_image)
        pred = pred.argmax(1)
        predicted_char = list(string.ascii_uppercase)[pred]

        return predicted_char



def predict_characters_on_examples():
  # create an instance and point to the pretrained model file
  predictor = CharacterPredictor(model_path="model.pth")

  # get example image filepaths
  example_images = os.listdir("example_images")
  example_images.sort()

  for example in example_images:
    # load the example image as grayscale
    image = io.imread(os.path.join("example_images", example), as_gray=True)
    # use the CharacterPredictor.predict() function to get the character written
    plt.figure()
    plt.imshow(image, cmap='gray')
    plt.show()
    
    print(f"{example}: prediction - {predictor.predict(image)}")
    

# Make sure this doesnt error out
predict_characters_on_examples()
No description has been provided for this image
a.png: prediction - A
No description has been provided for this image
b.png: prediction - B
No description has been provided for this image
c.png: prediction - C
No description has been provided for this image
d.png: prediction - D
No description has been provided for this image
e.png: prediction - E
No description has been provided for this image
f.png: prediction - F
No description has been provided for this image
g.png: prediction - G

Since the model's input size is 28x28 and my extracted character sizes are not necessarily that size, I implement functions below in order to pad images with empty columns or rows and resize them to be 28x28. I also tested adding additional padding all the way around the character because the example images above tend to have a little space from the tops and sides. In my testing that seemed to result in better results. To better visualize the padding and also the prediction result on that individual character that has been padded and resized, I displayed multiple examples of the padded image and the prediction.

You can see from the examples below, that the model does very well on handwritten examples. It gets most of them correct besides a few that are more easily confused with another letter such as l or i, but does have a slightly harder time predicting the typed examples. It is likely that the pretrained model was not trained on typed text and so it has a harder time with certain fonts. On the additional font I included that looks more like handwriting it does a pretty decent job overall.

In [77]:
import torch
from torchvision.transforms.v2.functional import resize

def pad_image(img, additional_padding=30):
  x,y = img.shape
  # print(img.shape)
  # print(x)
  # print(y)
  
  # Pad to equal ratio to keep shape
  if x > y:
    rows_to_add = x - y
    out = np.zeros((x, x))
    
    offset = rows_to_add//2
    out[:,offset:offset+y] = img
    
    img = out
  elif y > x:
    rows_to_add = y - x
    out = np.zeros((y, y))
    
    offset = rows_to_add//2
    out[offset:offset+x,:] = img
    
    img = out
  
  # Pad some more for slightly better performance
  x, y = img.shape
  total_rows_to_add = additional_padding
  offset = total_rows_to_add // 2
  out = np.zeros((x+total_rows_to_add, y+total_rows_to_add))
  out[offset:offset+x,offset:offset+y] = img
  img = out
  
  return img

def predict_characters_on_imgs(imgs, model = None):
  # create an instance and point to the pretrained model file if no model passed in
  using_custom_model = True
  if model is None:
    model = CharacterPredictor(model_path="model.pth")
    using_custom_model = False

  predictions = []
  for img in imgs:
    # Pad image
    img = pad_image(img, 10)
    
    # unsqueeze to get shape of C,W,H
    tensor_img = unsqueeze(torch.tensor(img), 0)
    # print(tensor_img.shape)
    resized_img = resize(tensor_img, (28,28))
    # print(resized_img.shape)
    
    # plt.figure()
    # plt.imshow(squeeze(resized_img).numpy(), cmap='gray')
    # plt.show()
    
    resized_img = squeeze(resized_img)
    
    # channel ordering
    if using_custom_model:
      resized_img = resized_img.permute(1,0)
      
    
    # use the CharacterPredictor.predict() function to get the character written
    prediction = model.predict(resized_img)
    # print(f"{prediction}")
    # print()
    
    predictions.append(prediction)
  
  return predictions

# display some examples and predictions
def display_imgs_and_predictions(imgs, predictions, fname=''):
  num_imgs = len(imgs)
  cols = 6
  rows = (num_imgs // cols) + 1
  if rows > 4:
    rows = 4
  fig, axs = plt.subplots(rows, cols, figsize=(9,9))
  
  for i, ax in enumerate(axs):
    for j in range(cols):
      img_idx = (i * cols) + j
      
      if img_idx < len(imgs):
        ax[j].imshow(pad_image(imgs[img_idx], 10), cmap='gray')
        ax[j].set_title(f'prediction: {predictions[img_idx]}')
        ax[j].set_xticks([])
        ax[j].set_yticks([])
      
  plt.suptitle('Padded/Resized Images and Predictions')
  plt.tight_layout()
  if fname != '':
    plt.savefig(f'{OUTPUT_PATH}padded_resized_' + fname)


def display_padded_images_and_predictions(imgs, fname=''):
  char_images, centers = extract_individual_characters(imgs, display=False)
  predictions = predict_characters_on_imgs(char_images)
  display_imgs_and_predictions(char_images, predictions, fname)
  
  
display_padded_images_and_predictions(test_images[0], test_filenames_png[0])
display_padded_images_and_predictions(test_images[1], test_filenames_png[1])
display_padded_images_and_predictions(test_images[2], test_filenames_png[2])
display_padded_images_and_predictions(test_images[3], test_filenames_png[3])
display_padded_images_and_predictions(test_images[4], test_filenames_png[4])
display_padded_images_and_predictions(test_images[5], test_filenames_png[5])
display_padded_images_and_predictions(test_images[6], test_filenames_png[6])
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Recognize Spaces / Sort Character Centers¶

This code uses the character centers to sort the characters with recognizing spaces and without spaces. In order to sort character centers properly I had to use a combination of the distance from centers and character size. I first use an average character size in order derive thresholds for a custom sorting function I wrote that can sort the characters based the x locations and y locations of the characters and the threshold. I then use that derived threshold to also determine which groups of characters are together and which ones are not. After quite a bit of testing, I found that using comparisons relative to the characters size works the best, which makes sense because smaller characters will be closer together and larger characters will have centers farther apart than smaller ones. The algorithm I wrote can automatically recognize spaces and groups text into words.

In the examples below, you can see that sorting characters and recognizing spaces works well for all of the handwritten images. The character ordering and spaces are almost 100% correct for most of the handwritten examples. You can also see that the letter predictions are all pretty close to correct. It correctly sorts, spaces, and predicts my "dream" image below and correctly predicts 212/214 characters. There is a couple of characters that are incorrect but they tend to be ones that are easier to be confused with another character. Recognizing spaces works mildy well for some of the typewritten examples (it does especially well on the typed font that looks more like handwritting, the "dream" image), but does poorly at recognizing spaces on the long paragraph typewritten example. I tested alternate methods and different configurations, but my current method seemed to be the one that worked best overall for the most images consistently.

In [78]:
from functools import cmp_to_key

# Tuple data together so it can be sorted properly
def compile_tuples(centers, predictions, char_images):
  d = []
  for i in range(len(predictions)):
    d.append((centers[i][0], centers[i][1], predictions[i], char_images[i].shape[0], char_images[i].shape[1]))
    
  return d

# Find thresholds from avg character size in order to determine spaces / ordering properly
def find_threshold_from_avg(char_images, x_ratio=1.63, y_ratio=1.63):
  x_total = 0
  y_total = 0
  for i in range(len(char_images)):
    x_total += char_images[i].shape[1]
    y_total += char_images[i].shape[0]
    
  x_avg = x_total / len(char_images)
  y_avg = y_total / len(char_images)
  # print('Averages:')
  # print(x_avg)
  # print(y_avg)
  
  x_threshold = x_avg * x_ratio
  y_threshold = y_avg * y_ratio
  # print('\nThresholds:')
  # print(x_threshold)
  # print(y_threshold)
  
  return x_threshold, y_threshold

# Sort characters using the character size thresholds and logic for ordering
def center_sorting_func(a,b):
  # Channels
  y1, x1, c, y1_size, x1_size = a
  y2, x2, c, y2_size, x2_size = b
  
  x_diff = x1 - x2
  y_diff = y1 - y2
  x_threshold = ((x1_size + x2_size) / 2) * 0.8
  y_threshold = ((y1_size + y2_size) / 2) * 0.8
  
  if np.abs(y_diff) > y_threshold:
    return -1 if y1 < y2 else 1
  
  if np.abs(x_diff) > x_threshold:
    return -1 if x1 < x2 else 1
  
  if x1 > x2 and y1 > y2: # b up left from a
    return -1
  elif x1 < x2 and y1 < y2: # b down right from a
    return 1
  elif x1 > x2 and y1 < y2: # b down left from a
    return -1
  elif x1 < x2 and y1 > y2: # b up right from a
    return 1

  return 0

# Sort characters with predictions and centers
def get_predicted_characters_in_order(centers, predictions, sorting_func, char_images):
  # Add predictions to the centers for sorting
  d = compile_tuples(centers, predictions, char_images)

  # Sort them
  out = sorted(d, key=cmp_to_key(sorting_func))
  
  # Output string
  out = ''.join(list(map(lambda x: x[2], out)))
  
  # print(out)
  return out

# recognize spaces
def recognize_spaces(centers, predictions, char_images):
  x_threshold, y_threshold = find_threshold_from_avg(char_images)
  
  d = compile_tuples(centers, predictions, char_images)
  d = sorted(d, key=cmp_to_key(center_sorting_func))
  
  out = ''
  prev_center = None
  for i in range(len(d)):
    curr = d[i]
    y, x, c, y_size, x_size = curr
    
    if i == 0:
      out += c
      prev_center = curr
      continue
    
    y_prev, x_prev, c_prev, y_size_prev, x_size_prev = prev_center
    y_diff = np.abs(y_prev - y)
    x_diff = np.abs(x_prev - x)
    if y_diff > y_threshold or x_diff > x_threshold:
      out += f' {c}'
    else:
      out += c
        
    prev_center = curr
      
  return out

# Helper for determining accuracy of character sorting and recognizing spaces
def get_correct_counts(p, label):
  num_letters = len(label)
  c = 0
  
  # added offset for spaces
  offset = 0
  for i in range(num_letters):
    idx = i + offset
    if len(p) > idx:
      if label[i] == p[idx]:
        c += 1
      else:
        # Add an offset for spaces
        if p[idx] == ' ' and label[i] != ' ':
          offset += 1
  
  return c, num_letters

def display_character_sorting(img, label, recognize_spacing=True):
  char_images, centers = extract_individual_characters(img, display=False)
  predictions = predict_characters_on_imgs(char_images)
  
  if recognize_spacing:
    out = recognize_spaces(centers, predictions, char_images)
    nc, nl = get_correct_counts(out, label)
    print()
    print()
    print(f'Actual label:                     {label}')
    print(f'Character sorting with spaces:    {out}')
    print(f'Accuracy: ({nc}/{nl})')
    
  else:
    out = get_predicted_characters_in_order(centers, predictions, center_sorting_func, char_images)
    nc, nl = get_correct_counts(out, label)
    print()
    print()
    print(f'Actual label:                     {label}')
    print(f'Character sorting without spaces: {out}')
    print(f'Accuracy: ({nc}/{nl})')
    
    
display_character_sorting(test_images[0], test_labels[0], recognize_spacing=False)
display_character_sorting(test_images[0], test_labels_spaces[0], recognize_spacing=True)

display_character_sorting(test_images[1], test_labels[1], recognize_spacing=False)
display_character_sorting(test_images[1], test_labels_spaces[1], recognize_spacing=True)

display_character_sorting(test_images[2], test_labels[2], recognize_spacing=False)
display_character_sorting(test_images[2], test_labels_spaces[2], recognize_spacing=True)

display_character_sorting(test_images[3], test_labels[3], recognize_spacing=False)
display_character_sorting(test_images[3], test_labels_spaces[3], recognize_spacing=True)

display_character_sorting(test_images[4], test_labels[4], recognize_spacing=False)
display_character_sorting(test_images[4], test_labels_spaces[4], recognize_spacing=True)

display_character_sorting(test_images[5], test_labels[5], recognize_spacing=False)
display_character_sorting(test_images[5], test_labels_spaces[5], recognize_spacing=True)

display_character_sorting(test_images[6], test_labels[6], recognize_spacing=False)
display_character_sorting(test_images[6], test_labels_spaces[6], recognize_spacing=True)

Actual label:                     BESURETODRINKYOUROVALTINE
Character sorting without spaces: BESURETODRINKYOUROVALTINE
Accuracy: (25/25)


Actual label:                     BE SURE TO DRINK YOUR OVALTINE
Character sorting with spaces:    BE SURE TO DRINK YOUR OVALTINE
Accuracy: (30/30)


Actual label:                     GOUTES
Character sorting without spaces: GOUTES
Accuracy: (6/6)


Actual label:                     GO UTES
Character sorting with spaces:    GO UTES
Accuracy: (7/7)


Actual label:                     DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION
Character sorting without spaces: DREAMBIGFORDREAMSIGNITEPOSSLBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHLNGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION
Accuracy: (181/183)


Actual label:                     DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION
Character sorting with spaces:    DREAM BIG FOR DREAMS IGNITE POSSLBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THLNGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION
Accuracy: (212/214)


Actual label:                     EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH
Character sorting without spaces: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH
Accuracy: (45/45)


Actual label:                     EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH
Character sorting with spaces:    EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH
Accuracy: (56/56)


Actual label:                     LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH
Character sorting without spaces: IOWCAKBOHYDRIEIITAJBJSHAVEBBCYJOMJFINCKBDSINGLYPNPULDKSUPPOKDBKSHCLAIMYSHBTIAKBNOISABLYMOKBFFFBCIIVEIHANCJTJFHJFKDIJFISFOKWBIGHTIIJSSANUPKUVIDBOIRHBKHBAIIHBBNFFIIGSSLTIHJJHCHDSIJUMJFKBIJCJNDPKBSSUKBDNDIMPROVBDCYHOIJBSTBROLITJBVJFJJSIHOWBVBIRSHUNQBUOJCITOKSBBLIBVTBIFIFSTJHFJUIBISYCARKTIPOIBNDIALLONGDTBKMHEDIJIHKISKSARBVITBVLOFDHBAVAILJABIJBKEYSHBAKCHLIVBRATUKBINDLCVDTITBSJHATLOWCAKBOHYURATBDIFYGRJSARJFHIGHLYEFFBCTIVEFUKSFJOKIIERMWFTIICHJINSSBIJITIHATDHJFLKIIOVRRIGIBRMBFFJFCDIVFTNFSSISNOIRSICNIFICANDLYTJJLGKBDTBKTHDNOVHBKJCOMMUNUIBRIPIANYSDHBIKLUNCRIFYKMYHIJBFFBCTSUNJCJYOIJJFSTBKNLLDVBLSANUBJJNOUPKBSSUREKTDBUNKNOWNKBSJFAKCHLIDDKAVURBSLTGCREIJSHDSLSOMEPOFRBNIIADFORNBRGAIIVBHBAIJTHOUDCOMBSASYHSOIIIAIBUWIIRHINCKEASBUVCONSUMPDINNOFSATIJKAJJFDFADIHISCYUNCIJUSIONPOINISHIUJTHBIMPNRIANCJFOERFOIJLOVLINCABAIANCBDMODRBKAJBDIFIAPPRNPKIADBFOKFHTBINJJIVIDLTIJJALASWJFLLASLTHFINEJFDFORFUKIRHBKKJFSHJFARCH
Accuracy: (40/765)


Actual label:                     LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH
Character sorting with spaces:    IO W C AKBO HYDR IE I IT A J BJS H AVE BBCYJO M JF INC KBDSINGLY PNPULDK SUPPOKDBKSH CLAIM YSHB TI AKB N OISABLY M OKB FFFBCIIVE IH AN CJT J FH JFK DIJFIS FOK W BIG HT IIJSS AN U PK UVIDB O IR HBK HBAII H BBNFFIIGS SLT I H J J H C H DS IJU M JFK BIJCJN D PKBSSU KB DN D IM PR OVBD CYH OIJBSTBROL I TJBV JFJJSI H O W BVBIR SH UNQB U O JC ITOKS BBLIBV TB IFIFS T JHFJ UIBIS YC ARK TI POIBNDIAL LO NG D TBK M HE DIJIH KISKS ARB VITB VL OF DHB AVAILJABIJB KE YSH BAKC H LIVBRATU KB IN DLCVDTITBS JH AT LO W C AKBO HYURATB DIFYG R J S AR JF HIG HLY EFFBCTIVE FUK SFJO KI IER M WFTIIC HJ INSS BIJITIH AT DH JFLK IIO V RR I G IBR M BFF JFCDIVFTNFSS IS N OIRSIC NIFIC ANDLY T J J L G KBDTBK TH DN OVHBK JC O M M U N UIBRI PIAN YS DHBIK LU NC RIFYK M Y H I J BFFBCTS U N JCJYOIJJFSTBK NL LDVBLS AN U BJJN O U PKBSSU RE K T D B U NK N O W N KBS JF AKC H LIDDKAVU RB SLTGCREIJ SH DSL SO ME PO FR BNIIAD FO R NB RG AIIVB HBAIJTH OUDC O MBS AS Y H SOIIIAIBU WIIRH INC KEASBU VC O NSU MPDIN N OF SATIJKAJ JF D FAD IHIS CYU NCIJUSIO N P OINISH IU JTHB IMPNRIANC JF OER FOIJLO VL INC A BAIANCBD M O D RBKAJB DIFI APPR NPKIADB FO K FH TB INJJIVIDLT I J J AL AS W JFLL ASL THFI NE JF D FOR FU KIR HBK K JFSH JF ARC H
Accuracy: (90/895)


Actual label:                     YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED
Character sorting without spaces: YOUWIDIEACBMANXDEFBATSINIIFEBUTNBVBRIETYOURSBIEBBDBEBATBD
Accuracy: (39/57)


Actual label:                     YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED
Character sorting with spaces:    YOU WIDI EACB MANX DEFBATS IN IIFE BUT NBVBR IET YOURSBIE BB DBEBATBD
Accuracy: (51/69)


Actual label:                     ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS
Character sorting without spaces: ABSIKACTAUDIOPAITBKNKBCOGNIJIONISANIMPOKTANTKBSFKCHJOPICINTHBMAYJACHINBIBDKNINGAKBAANDINCIJUDBSSBVBKALIAYSKSSUCHDSAUDIOJATGGINGACOUSIICSCTJBNBCLASSIFICDJIONDNDSOUNDBVJJFNTDBBCJIONKBCBNJLYNBUKALNBRIWORKSHAVBBBBNAPPLIBDTOSULVBAUDIOPDTTJFKNKFCOIGNIJIONPKUBLMPKRJBSHOWBVJFKJFVIOUSSYSTBMSFOCUSONSMALLDAJASTJFJSWHICHLIMIRISJHBPBKFOKMANCDBOFAUDIOPATIBKNKBCOCNIIIONSYSHJBMS
Accuracy: (53/345)


Actual label:                     ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS
Character sorting with spaces:    ABSIKACT AUDIO PAITBKN KBCOGNIJION IS AN IMPOKTANT KBSF KCH JOPIC IN THB MA Y JA C HINB IBDKNING AKBA AND INCIJUDBS SBVBKAL IAYSKS SUCH DS AUDIO JA TGGING ACOUSIIC SC T JBNB CLASSIFICDJION DND SOUND BV J JFNT DB BCJION KBCBNJLY NBUKAL NBRIW ORKS HAVB BBBN APPLIBD TO SULVB AUDIO PDTTJFKN KFCO IGNIJION PKUBL M PK R J B S HOWBVJFK JFVIOUS SYSTBMS FOCUS ON SMALL DAJAS T JFJS W HICH LIMIRIS JHB PBKFOKMANCDB OF AUDIO PATIBKN KBCOCNIIION SYSHJBMS
Accuracy: (201/401)

Transcribe Images / Write the Output¶

Below I transcribe each of the test images and write the characters in order with/without spaces to their corresponding text files. You can see that it outputs two text files with the predicted characters. One has spaces and one does not have the spaces. I show comparisions between the actual label and the predicted label with recognizing spaces and without recognizing spaces. I also show the overall accuracy. The pretrained model does well on handwritten characters but does not do as well for typed characters except for the particular font that looks a bit more handwritten below. It could be that the pretrained model was not trained on any typed examples and so it has a harder time on those.

You can see below that the "ovaltine" (25/25), "go utes" (6/6), and "moment" (45/45) images are perfectly transcribed from the image. It also does quite well on the typed "dream" image which has a font that looks more similar to handwritting (181/183 characters are correctly predicted which is impressive). It correctly predicts (39/57) characters on the short typed example. It performs poorly on the other 2 longer typed examples; the predictions are not correct and the spaces for the longest example are not estimated as well. So overall it seems to do really well on the actual handwritten examples and on typed examples that look more like handwritting. It tends to do more poorly on certain typed examples. Potentially the pretrained model was not trained on typed examples or different fonts and so it has a harder time classifying those characters.

In [79]:
def image_transcription(img, label, label_spaces, path, fname, model=None):
  # Extract individual characters
  char_images, centers = extract_individual_characters(img)

  # Pad/resize images and predict letter
  predictions = predict_characters_on_imgs(char_images, model)
  display_imgs_and_predictions(char_images, predictions)
  
  # Predict string from image no spaces
  sorted_str = get_predicted_characters_in_order(centers, predictions, center_sorting_func, char_images)
  # print(f'\nPredicted string from image: {sorted_str}')
  nc, nl = get_correct_counts(sorted_str, label)
  # print()
  print()
  print(f'Actual label:                   {label}')
  print(f'Predicted label without spaces: {sorted_str}')
  print(f'Accuracy: ({nc}/{nl})')
  
  with open(f'{path}/{fname.replace(".png", "").replace(".jpg", "")}_prediction.txt', 'w') as f:
    f.write(sorted_str)
  
  # Predict string from image with recognized spaces
  formatted_str = recognize_spaces(centers, predictions, char_images)
  # print(f'Predicted string from image with recognized spaces: {formatted_str}')
  nc, nl = get_correct_counts(formatted_str, label_spaces)
  print()
  print()
  print(f'Actual label:                   {label_spaces}')
  print(f'Predicted label with spaces:    {formatted_str}')
  print(f'Accuracy: ({nc}/{nl})')
  print()
  
  with open(f'{path}/{fname.replace(".png", "").replace(".jpg", "")}_spaces_prediction.txt', 'w') as f:
    f.write(formatted_str)

  return formatted_str
  
  
out = image_transcription(test_images[0], test_labels[0], test_labels_spaces[0], TEST_PATH, test_filenames[0])
Actual label:                   BESURETODRINKYOUROVALTINE
Predicted label without spaces: BESURETODRINKYOUROVALTINE
Accuracy: (25/25)


Actual label:                   BE SURE TO DRINK YOUR OVALTINE
Predicted label with spaces:    BE SURE TO DRINK YOUR OVALTINE
Accuracy: (30/30)

No description has been provided for this image
No description has been provided for this image
In [80]:
out = image_transcription(test_images[1], test_labels[1], test_labels_spaces[1], TEST_PATH, test_filenames[1])
Actual label:                   GOUTES
Predicted label without spaces: GOUTES
Accuracy: (6/6)


Actual label:                   GO UTES
Predicted label with spaces:    GO UTES
Accuracy: (7/7)

No description has been provided for this image
No description has been provided for this image
In [81]:
out = image_transcription(test_images[2], test_labels[2], test_labels_spaces[2], TEST_PATH, test_filenames[2])
Actual label:                   DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION
Predicted label without spaces: DREAMBIGFORDREAMSIGNITEPOSSLBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHLNGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION
Accuracy: (181/183)


Actual label:                   DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION
Predicted label with spaces:    DREAM BIG FOR DREAMS IGNITE POSSLBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THLNGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION
Accuracy: (212/214)

No description has been provided for this image
No description has been provided for this image
In [82]:
out = image_transcription(test_images[3], test_labels[3], test_labels_spaces[3], TEST_PATH, test_filenames[3])
Actual label:                   EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH
Predicted label without spaces: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH
Accuracy: (45/45)


Actual label:                   EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH
Predicted label with spaces:    EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH
Accuracy: (56/56)

No description has been provided for this image
No description has been provided for this image
In [83]:
out = image_transcription(test_images[4], test_labels[4], test_labels_spaces[4], TEST_PATH, test_filenames[4])
Actual label:                   LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH
Predicted label without spaces: IOWCAKBOHYDRIEIITAJBJSHAVEBBCYJOMJFINCKBDSINGLYPNPULDKSUPPOKDBKSHCLAIMYSHBTIAKBNOISABLYMOKBFFFBCIIVEIHANCJTJFHJFKDIJFISFOKWBIGHTIIJSSANUPKUVIDBOIRHBKHBAIIHBBNFFIIGSSLTIHJJHCHDSIJUMJFKBIJCJNDPKBSSUKBDNDIMPROVBDCYHOIJBSTBROLITJBVJFJJSIHOWBVBIRSHUNQBUOJCITOKSBBLIBVTBIFIFSTJHFJUIBISYCARKTIPOIBNDIALLONGDTBKMHEDIJIHKISKSARBVITBVLOFDHBAVAILJABIJBKEYSHBAKCHLIVBRATUKBINDLCVDTITBSJHATLOWCAKBOHYURATBDIFYGRJSARJFHIGHLYEFFBCTIVEFUKSFJOKIIERMWFTIICHJINSSBIJITIHATDHJFLKIIOVRRIGIBRMBFFJFCDIVFTNFSSISNOIRSICNIFICANDLYTJJLGKBDTBKTHDNOVHBKJCOMMUNUIBRIPIANYSDHBIKLUNCRIFYKMYHIJBFFBCTSUNJCJYOIJJFSTBKNLLDVBLSANUBJJNOUPKBSSUREKTDBUNKNOWNKBSJFAKCHLIDDKAVURBSLTGCREIJSHDSLSOMEPOFRBNIIADFORNBRGAIIVBHBAIJTHOUDCOMBSASYHSOIIIAIBUWIIRHINCKEASBUVCONSUMPDINNOFSATIJKAJJFDFADIHISCYUNCIJUSIONPOINISHIUJTHBIMPNRIANCJFOERFOIJLOVLINCABAIANCBDMODRBKAJBDIFIAPPRNPKIADBFOKFHTBINJJIVIDLTIJJALASWJFLLASLTHFINEJFDFORFUKIRHBKKJFSHJFARCH
Accuracy: (40/765)


Actual label:                   LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH
Predicted label with spaces:    IO W C AKBO HYDR IE I IT A J BJS H AVE BBCYJO M JF INC KBDSINGLY PNPULDK SUPPOKDBKSH CLAIM YSHB TI AKB N OISABLY M OKB FFFBCIIVE IH AN CJT J FH JFK DIJFIS FOK W BIG HT IIJSS AN U PK UVIDB O IR HBK HBAII H BBNFFIIGS SLT I H J J H C H DS IJU M JFK BIJCJN D PKBSSU KB DN D IM PR OVBD CYH OIJBSTBROL I TJBV JFJJSI H O W BVBIR SH UNQB U O JC ITOKS BBLIBV TB IFIFS T JHFJ UIBIS YC ARK TI POIBNDIAL LO NG D TBK M HE DIJIH KISKS ARB VITB VL OF DHB AVAILJABIJB KE YSH BAKC H LIVBRATU KB IN DLCVDTITBS JH AT LO W C AKBO HYURATB DIFYG R J S AR JF HIG HLY EFFBCTIVE FUK SFJO KI IER M WFTIIC HJ INSS BIJITIH AT DH JFLK IIO V RR I G IBR M BFF JFCDIVFTNFSS IS N OIRSIC NIFIC ANDLY T J J L G KBDTBK TH DN OVHBK JC O M M U N UIBRI PIAN YS DHBIK LU NC RIFYK M Y H I J BFFBCTS U N JCJYOIJJFSTBK NL LDVBLS AN U BJJN O U PKBSSU RE K T D B U NK N O W N KBS JF AKC H LIDDKAVU RB SLTGCREIJ SH DSL SO ME PO FR BNIIAD FO R NB RG AIIVB HBAIJTH OUDC O MBS AS Y H SOIIIAIBU WIIRH INC KEASBU VC O NSU MPDIN N OF SATIJKAJ JF D FAD IHIS CYU NCIJUSIO N P OINISH IU JTHB IMPNRIANC JF OER FOIJLO VL INC A BAIANCBD M O D RBKAJB DIFI APPR NPKIADB FO K FH TB INJJIVIDLT I J J AL AS W JFLL ASL THFI NE JF D FOR FU KIR HBK K JFSH JF ARC H
Accuracy: (90/895)

No description has been provided for this image
No description has been provided for this image
In [84]:
out = image_transcription(test_images[5], test_labels[5], test_labels_spaces[5], TEST_PATH, test_filenames[5])
Actual label:                   YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED
Predicted label without spaces: YOUWIDIEACBMANXDEFBATSINIIFEBUTNBVBRIETYOURSBIEBBDBEBATBD
Accuracy: (39/57)


Actual label:                   YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED
Predicted label with spaces:    YOU WIDI EACB MANX DEFBATS IN IIFE BUT NBVBR IET YOURSBIE BB DBEBATBD
Accuracy: (51/69)

No description has been provided for this image
No description has been provided for this image
In [85]:
out = image_transcription(test_images[6], test_labels[6], test_labels_spaces[6], TEST_PATH, test_filenames[6])
Actual label:                   ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS
Predicted label without spaces: ABSIKACTAUDIOPAITBKNKBCOGNIJIONISANIMPOKTANTKBSFKCHJOPICINTHBMAYJACHINBIBDKNINGAKBAANDINCIJUDBSSBVBKALIAYSKSSUCHDSAUDIOJATGGINGACOUSIICSCTJBNBCLASSIFICDJIONDNDSOUNDBVJJFNTDBBCJIONKBCBNJLYNBUKALNBRIWORKSHAVBBBBNAPPLIBDTOSULVBAUDIOPDTTJFKNKFCOIGNIJIONPKUBLMPKRJBSHOWBVJFKJFVIOUSSYSTBMSFOCUSONSMALLDAJASTJFJSWHICHLIMIRISJHBPBKFOKMANCDBOFAUDIOPATIBKNKBCOCNIIIONSYSHJBMS
Accuracy: (53/345)


Actual label:                   ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS
Predicted label with spaces:    ABSIKACT AUDIO PAITBKN KBCOGNIJION IS AN IMPOKTANT KBSF KCH JOPIC IN THB MA Y JA C HINB IBDKNING AKBA AND INCIJUDBS SBVBKAL IAYSKS SUCH DS AUDIO JA TGGING ACOUSIIC SC T JBNB CLASSIFICDJION DND SOUND BV J JFNT DB BCJION KBCBNJLY NBUKAL NBRIW ORKS HAVB BBBN APPLIBD TO SULVB AUDIO PDTTJFKN KFCO IGNIJION PKUBL M PK R J B S HOWBVJFK JFVIOUS SYSTBMS FOCUS ON SMALL DAJAS T JFJS W HICH LIMIRIS JHB PBKFOKMANCDB OF AUDIO PATIBKN KBCOCNIIION SYSHJBMS
Accuracy: (201/401)

No description has been provided for this image
No description has been provided for this image

Train Your Own Character Classifier¶

For the extra credit part of training your own character classifier, I experimented with a similar model type that I did for Project 3 - Part 5 and experimented with different layers and base models to fine tune in order to get a model that performed decently well. After quite a few runs I ended up using the layers up to and including layer 3 in ResNet101 as a backbone and then have additional layers that I used to classify a character out of the 26 letters in the alphabet. I run quite a few different variations on the additional layers and found that this model configution performed decently well. Similarly to project 3 part 5, I used various methods such as dropout in order to reduce overfitting so that the model would generalize better and not overfit as much on the training set. I tracked the different runs I did using tensorboard in order to keep track of hyperparameter performance, how long certain models took to train, and their overall generalization. In the end below I trained two main models with the best performing hyperparameters out of all my runs. I used cross entropy loss in order to improve performance of the model in classifying the correct character and a SGD optimizer.

Overall, the models that I trained below perform similar to the pretrained model but just barely worse in accuracy on some of the examples. I go more in depth on the two models I trained below and their results further down in the notebook.

In [15]:
import time
import torch
import numpy as np
from torch import nn
import matplotlib.pyplot as plt
from torchvision.transforms import v2 as transforms
from torchvision.models import resnet101
from torch.utils.data import DataLoader
from torch.utils.data import random_split
from torch.utils.tensorboard import SummaryWriter
from tensorboard.backend.event_processing.event_accumulator import EventAccumulator

PyTorch has a module inorder to use and access the EMNIST dataset: https://pytorch.org/vision/main/generated/torchvision.datasets.EMNIST.html . I used this dataset in order to create my dataloaders for my training, validation, and test dataloaders. I had to do a random split on the training dataset in order to properly split the training dataset into training and validation sets. I ended up using an 80, 20 split. I also tested using different batch sizes and transforms in order to improve performance. I found that the model performed well without needing too many transformations because it didn't seem to overfit as much on the training set for this dataset compared to the dataset for project 3.

In [16]:
from torchvision.datasets import EMNIST

dtype = torch.float32  ## instialize the data types used in training
cpu = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
batch_size = 128

# Need to convert the image to a tensor so we can use it properly
transform = transforms.Compose([
    transforms.ToTensor(),
    ])

test_transform = transforms.Compose([
    transforms.ToTensor(),
    ])


# Full training set, we want a validation set too so we will split it
FullTrainingSet = EMNIST(root=".", split='letters', train=True, download=True, transform=transform)

# Split full training set into training / validation sets
TrainingSet, ValidationSet = random_split(FullTrainingSet, [.80, .20])
TestingSet = EMNIST(root=".", split='letters', train=False, download=True, transform=test_transform)

## DataLoader is a pytorch Class for iterating over a dataset
dataloader_train = DataLoader(TrainingSet, batch_size=batch_size, num_workers=4, shuffle=True, pin_memory=True)
dataloader_test = DataLoader(TestingSet, batch_size=1)
dataloader_val = DataLoader(ValidationSet, batch_size=batch_size)
In [17]:
class CustomCharacterPredictor(torch.nn.Module):
  def __init__(self):
    super(CustomCharacterPredictor, self).__init__()
    
    self.device = 'cpu'
    
    # resnet101 up to and including layer3
    self.backbone = torch.nn.Sequential(*list(resnet101(weights='DEFAULT').children())[:-3]) 

    # Handle the proper image size by changing the first layer
    self.backbone[0] = Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)

    # Disable conv2d bias because of batchnorm
    self.additional = torch.nn.Sequential(
        torch.nn.Conv2d(1024, 256, 3, 1, 1, bias=False),
        torch.nn.BatchNorm2d(256),
        torch.nn.MaxPool2d(2),
        torch.nn.ReLU(),
        torch.nn.Flatten(),
        torch.nn.Dropout(0.6),
        torch.nn.Linear(256,26),
        torch.nn.Softmax(),
    )

  def forward(self, img):
    # Shape should be (n, c, m, n)
    #   where c is channels and n is num examples
    #   m and n is width and height

    # Use the backbone on char img
    res_out = self.backbone(img)

    # Additional layers to classify the characters
    o = self.additional(res_out)

    return o

  # Helpful method to predict on single images, rather than a whole dataloader
  def predict(self, char_image: Union[ndarray, Tensor]):
    # check if char_image is of the right type and shape
    if isinstance(char_image, ndarray):
        char_image = from_numpy(char_image)
    elif not isinstance(char_image, Tensor):
        raise TypeError(
            f"expected image of type np.ndarray instead got {type(char_image)}"
        )
    if char_image.shape != (28, 28):
        raise ValueError(
            f"expected image of shape (28, 28), instead got {char_image.shape}"
        )

    # convert to 4D (batch, channels, x, y) and change type
    char_image = unsqueeze(unsqueeze(char_image, 0), 0)
    char_image = char_image.to(device=cpu, dtype=float32)

    # predict and output the argmax index of the prediction as the character
    pred = self.forward(char_image)
    pred = pred.argmax(1)
    predicted_char = list(string.ascii_uppercase)[pred]

    return predicted_char
In [18]:
# Changes following pytorch.org tutorials to speed up training like not calling cpu every time.

def display_training_and_validation_loss(dir_path):
    # Since I was using tensorboard to track runs, I had to look up how to access the data from tensorboard
    # It lead me to some tensorflow documentation and then to here: 
    # https://github.com/tensorflow/tensorboard/blob/master/tensorboard/backend/event_processing/event_accumulator.py
    # EventAccumulator provides a way to access data from the run
    ea = EventAccumulator(dir_path)
    
    # From that link above, the Reload() method loads all the data for the run
    ea.Reload()

    # This way we can access the data written during the run and display it
    training_loss = ea.Scalars("training loss")
    validation_loss = ea.Scalars("validation loss")

    # Get data for training loss
    training_loss_step = []
    training_loss_loss = []
    for i in range(len(training_loss)):
        training_loss_step.append(training_loss[i].step)
        training_loss_loss.append(training_loss[i].value)
    
    # Get data for validation loss
    validation_loss_step = []
    validation_loss_loss = []
    for i in range(len(validation_loss)):
        validation_loss_step.append(validation_loss[i].step)
        validation_loss_loss.append(validation_loss[i].value)

    # Display loss curves
    plt.figure()
    plt.plot(validation_loss_step, validation_loss_loss, label='val loss')
    plt.plot(training_loss_step, training_loss_loss, label='train loss')
    plt.legend()
    plt.title('Training and val loss')
    plt.xlabel('Step')
    plt.ylabel('Avg Loss')
    plt.show()


def checkTestingCrossEntropyLoss(model, dataloader):
    print()
    print()
    print(f'**** Running model on the testing dataset ****')
    model.eval()
    running_loss = 0.0
    num_correct = 0
    num_total = 0
    loss_function = nn.CrossEntropyLoss()
    for t, (imgs, labels) in enumerate(dataloader):
        imgs = imgs.to(device=cpu, dtype=dtype)
        labels -= 1
        labels = labels.to(device=cpu, dtype=torch.long)
        
        # Running images thru model
        predictions = model(imgs)

        # Calculate loss, backprop, optimize
        loss = loss_function(predictions, labels)
        
        # Track running loss 
        running_loss += loss.item() * len(labels)
        
        # Track accuracy
        pred_idxs = torch.argmax(predictions, dim=1)
        num_correct += torch.sum(pred_idxs == labels)
        num_total += len(labels)

    
    print(f'Test total loss: {running_loss}')
    print(f'Test avg loss: {running_loss/len(dataloader.dataset)}')
    print(f"Test accuracy: {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]")
    return running_loss


def get_num_channels(img):
  # Check for grayscale
  if len(img.shape) < 3:
    return 1

  return img.shape[-1]

def convert_grayscale(image):
  weights = [0.3, 0.6, 0.1]

  channels = get_num_channels(image)
  if channels == 1: # Grayscale
    return image
  elif channels == 3: # RGB
    return (image @ weights) / 255.0
  elif channels == 4: # ARGB
    # Only use the first 3 channels
    return (image[:,:,:3] @ weights) /255.0

# Return ascii character from number 0-25
def get_character(idx):
    return list(string.ascii_uppercase)[idx]

# Display character and prediction
def display_out(data, ax):
    # print(data[0].shape)
    # channels
    img = data[0].permute(1,0).numpy()
    
    ax.imshow(img, cmap="gray")
    ax.set_title(f'pred: {get_character(data[2])}, actual: {get_character(data[1])}, loss: {np.round(data[3], 3)}')
    return

# Display a plot of multiple characters and predictions/labels
def display_output_images(model, dataloader, train=False):
    # Get images to display from test set
    images = []
    actual_labels = []
    preds = []
    cross_entropy_loss = []
    num_images = 16

    model.eval()
    loss_function = nn.CrossEntropyLoss()
    t = 0
    for t, (imgs, labels) in enumerate(dataloader):
        if t >= num_images:
            break
        
        if imgs.shape[0] > 1:
            imgs = imgs[:1]
        
        labels -= 1
        if labels.shape[0] > 1:
            labels = labels[:1]
        
        imgs = imgs.to(device=cpu, dtype=dtype)
        labels = labels.to(device=cpu, dtype=torch.long)
        
        # Running images thru model
        predictions = model(imgs)
        pred_labels = torch.argmax(predictions, dim=1)
        
        # Calculate loss, backprop, optimize
        loss = loss_function(predictions, labels)
        
        images.append(imgs.cpu().detach().squeeze())
        actual_labels.append(labels.cpu().detach().squeeze())
        cross_entropy_loss.append(loss.item())
        preds.append(pred_labels.cpu().detach().squeeze())

    cols = 4
    rows = num_images // cols
    idx = 0
    fig, axs = plt.subplots(rows, cols, figsize=(16, 14))
    for i, ax in enumerate(axs):
        display_out([images[idx], actual_labels[idx], preds[idx], cross_entropy_loss[idx]], ax[0])
        if idx + 1 < num_images:
            display_out([images[idx + 1], actual_labels[idx + 1], preds[idx + 1], cross_entropy_loss[idx + 1]], ax[1])
        if idx + 2 < num_images:
            display_out([images[idx + 2], actual_labels[idx + 2], preds[idx + 2], cross_entropy_loss[idx + 2]], ax[2])
        if idx + 3 < num_images:
            display_out([images[idx + 3], actual_labels[idx + 3], preds[idx + 3], cross_entropy_loss[idx + 3]], ax[3])
            
        idx += cols

    dataloader_type = 'testing' if not train else 'training'
    plt.suptitle(f'Output {dataloader_type} Examples')
    plt.tight_layout()
    plt.savefig(f'model-predictions-{dataloader_type}-examples.png')


def trainingLoop(model, optimizer, nepochs, train_dataloader, val_dataloader, test_dataloader):
    curr_time = int(time.time())
    run_dir = f'runs/'
    run_name = f'run_{curr_time}'
    writer = SummaryWriter(run_dir + run_name)
    print(f'**** Starting {run_name} ****')
    
    total_records = len(train_dataloader.dataset)
    total_val_records = len(val_dataloader.dataset)
    model = model.to(device=cpu)

    # CrossEntropyLoss for classification problem
    loss_function = nn.CrossEntropyLoss()
    current_step = 0

    for ep in range(nepochs):
        print("Epoch", ep)
        model.train()
        
        running_loss = 0.0
        num_correct = 0
        num_total = 0

        for t, (imgs, labels) in enumerate(train_dataloader):
            imgs = imgs.to(device=cpu, dtype=dtype)
            
            # Probably since this is matlab data(?) the labels start at 1 instead of 0
            labels -= 1
            labels = labels.to(device=cpu, dtype=torch.long)
            
            # zero gradient
            optimizer.zero_grad()
            
            # Running images thru model
            predictions = model(imgs)

            # Calculate loss, backprop, optimize
            loss = loss_function(predictions, labels)
            loss.backward()
            optimizer.step()
            
            running_loss += loss.item() * len(labels)
            
            # Track accuracy
            pred_idxs = torch.argmax(predictions, dim=1)
            num_correct += torch.sum(pred_idxs == labels)
            num_total += len(labels)
            
            if t % 20 == 19:
                # Print current training loss and write training loss to tensorboard for tracking
                # Followed this and other tutorials on pytorch.org in order to figure out how to use 
                # tensorboard with torch https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html
                loss, current = loss.item() * len(labels), (t + 1) * batch_size
                print(f"training loss: {loss:>7f}  [{current:>5d}/{total_records:>5d}], accuracy {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]")
                current_step = (ep * total_records) + ((t + 1) * batch_size)
                writer.add_scalar('training loss', running_loss / ((t + 1)*batch_size), (ep * total_records) + ((t + 1) * batch_size))

        print(f"training avg loss: {running_loss / total_records:>7f}  [{total_records:>5d}/{total_records:>5d}]")
        print(f"training accuracy: {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]")
        current_step = ((ep+1) * total_records) 
        writer.add_scalar('training loss', running_loss / total_records, current_step)
        
        # Validation step
        model.eval()
        running_loss = 0.0
        num_correct = 0
        num_total = 0
        for t, (imgs, labels) in enumerate(val_dataloader):
            imgs = imgs.to(device=cpu, dtype=dtype)
            labels -= 1
            labels = labels.to(device=cpu, dtype=torch.long)
            
            # Running images thru model
            predictions = model(imgs)

            # Calculate loss, backprop, optimize
            loss = loss_function(predictions, labels)
            
            # Track running loss 
            running_loss += loss.item() * len(labels)
            
            # Track accuracy
            pred_idxs = torch.argmax(predictions, dim=1)
            num_correct += torch.sum(pred_idxs == labels)
            num_total += len(labels)

        print(f"validation avg loss: {running_loss / total_val_records:>7f}")
        print(f"validation accuracy: {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]\n")
        writer.add_scalar('validation loss', running_loss / total_val_records, current_step)

        print(f'saving model\n')
        torch.save(model, f'{run_dir}{run_name}/model_epoch{ep}_{running_loss / total_val_records:>7f}.pth')


    # Display the loss curves
    display_training_and_validation_loss(run_dir + run_name + '/')
    
    # Run model on testing dataset
    checkTestingCrossEntropyLoss(model, test_dataloader)
    
    # Display outputs for the test dataloader
    display_output_images(model, test_dataloader)
    
    # Display outputs for the train dataloader for fun
    display_output_images(model, train_dataloader, True)

    return True

Here are some different training runs with different hyperparameters and results. I also test the trained model on the other test images that were used with the pretrained model above.

Model 1¶

In depth discussion about model results are after the cell below.

In [19]:
learningRate = 1e-3  # Set this value between 1e-2 to 1e-4
weightDecay = 1e-3  # Set this value between 1e-2 to 1e-4
momentum = 0.9 # Adding momentum to potentially improve training using SGD
epochs = 30

model = CustomCharacterPredictor()
optimizer = torch.optim.SGD(model.parameters(), lr=learningRate, weight_decay=weightDecay, momentum=momentum)
res = trainingLoop(model, optimizer, epochs, dataloader_train, dataloader_val, dataloader_test)
**** Starting run_1701988179 ****
Epoch 0
training loss: 417.399536  [ 2560/99840], accuracy 3.48% [   89/ 2560]
training loss: 416.717712  [ 5120/99840], accuracy 3.71% [  190/ 5120]
training loss: 416.543457  [ 7680/99840], accuracy 3.97% [  305/ 7680]
training loss: 416.257477  [10240/99840], accuracy 4.31% [  441/10240]
training loss: 416.371277  [12800/99840], accuracy 4.81% [  616/12800]
training loss: 414.638092  [15360/99840], accuracy 5.23% [  803/15360]
training loss: 414.270386  [17920/99840], accuracy 5.67% [ 1016/17920]
training loss: 413.309204  [20480/99840], accuracy 6.17% [ 1263/20480]
training loss: 413.589996  [23040/99840], accuracy 6.76% [ 1558/23040]
training loss: 412.421204  [25600/99840], accuracy 7.25% [ 1856/25600]
training loss: 407.709045  [28160/99840], accuracy 7.83% [ 2205/28160]
training loss: 404.988037  [30720/99840], accuracy 8.45% [ 2595/30720]
training loss: 402.902863  [33280/99840], accuracy 8.99% [ 2991/33280]
training loss: 406.822144  [35840/99840], accuracy 9.48% [ 3397/35840]
training loss: 407.680756  [38400/99840], accuracy 10.10% [ 3878/38400]
training loss: 403.363403  [40960/99840], accuracy 10.63% [ 4356/40960]
training loss: 395.166168  [43520/99840], accuracy 11.19% [ 4869/43520]
training loss: 400.643799  [46080/99840], accuracy 11.73% [ 5403/46080]
training loss: 397.418640  [48640/99840], accuracy 12.34% [ 6003/48640]
training loss: 392.263489  [51200/99840], accuracy 12.91% [ 6608/51200]
training loss: 396.486877  [53760/99840], accuracy 13.39% [ 7199/53760]
training loss: 390.780945  [56320/99840], accuracy 13.98% [ 7872/56320]
training loss: 395.139465  [58880/99840], accuracy 14.47% [ 8519/58880]
training loss: 391.105774  [61440/99840], accuracy 14.92% [ 9167/61440]
training loss: 393.452423  [64000/99840], accuracy 15.38% [ 9842/64000]
training loss: 383.788086  [66560/99840], accuracy 15.80% [10517/66560]
training loss: 397.488403  [69120/99840], accuracy 16.19% [11188/69120]
training loss: 393.247925  [71680/99840], accuracy 16.61% [11908/71680]
training loss: 394.213989  [74240/99840], accuracy 16.98% [12609/74240]
training loss: 388.119476  [76800/99840], accuracy 17.39% [13354/76800]
training loss: 393.660034  [79360/99840], accuracy 17.79% [14119/79360]
training loss: 377.309143  [81920/99840], accuracy 18.26% [14955/81920]
training loss: 382.827942  [84480/99840], accuracy 18.72% [15811/84480]
training loss: 386.795959  [87040/99840], accuracy 19.18% [16696/87040]
training loss: 387.133423  [89600/99840], accuracy 19.61% [17573/89600]
training loss: 379.391479  [92160/99840], accuracy 20.03% [18461/92160]
training loss: 380.868622  [94720/99840], accuracy 20.49% [19404/94720]
training loss: 380.531189  [97280/99840], accuracy 20.86% [20296/97280]
training loss: 374.013977  [99840/99840], accuracy 21.28% [21243/99840]
training avg loss: 3.124815  [99840/99840]
training accuracy: 21.28% [21243/99840]
validation avg loss: 2.967460
validation accuracy: 36.75% [ 9172/24960]

saving model

Epoch 1
training loss: 378.616455  [ 2560/99840], accuracy 36.52% [  935/ 2560]
training loss: 377.128784  [ 5120/99840], accuracy 36.60% [ 1874/ 5120]
training loss: 383.775360  [ 7680/99840], accuracy 37.08% [ 2848/ 7680]
training loss: 379.599518  [10240/99840], accuracy 37.39% [ 3829/10240]
training loss: 384.375824  [12800/99840], accuracy 37.57% [ 4809/12800]
training loss: 378.512817  [15360/99840], accuracy 38.19% [ 5866/15360]
training loss: 371.888916  [17920/99840], accuracy 38.71% [ 6937/17920]
training loss: 380.652710  [20480/99840], accuracy 39.01% [ 7990/20480]
training loss: 373.703674  [23040/99840], accuracy 39.56% [ 9115/23040]
training loss: 379.337555  [25600/99840], accuracy 39.89% [10211/25600]
training loss: 375.746704  [28160/99840], accuracy 40.27% [11339/28160]
training loss: 370.908386  [30720/99840], accuracy 40.69% [12499/30720]
training loss: 374.899414  [33280/99840], accuracy 41.08% [13671/33280]
training loss: 373.948517  [35840/99840], accuracy 41.34% [14815/35840]
training loss: 376.855225  [38400/99840], accuracy 41.64% [15991/38400]
training loss: 370.158508  [40960/99840], accuracy 41.95% [17181/40960]
training loss: 362.641052  [43520/99840], accuracy 42.36% [18435/43520]
training loss: 370.276520  [46080/99840], accuracy 42.66% [19656/46080]
training loss: 363.283478  [48640/99840], accuracy 43.03% [20930/48640]
training loss: 370.896332  [51200/99840], accuracy 43.40% [22221/51200]
training loss: 371.253906  [53760/99840], accuracy 43.75% [23522/53760]
training loss: 364.010132  [56320/99840], accuracy 44.11% [24844/56320]
training loss: 353.933075  [58880/99840], accuracy 44.50% [26202/58880]
training loss: 366.255859  [61440/99840], accuracy 44.81% [27532/61440]
training loss: 353.542542  [64000/99840], accuracy 45.14% [28892/64000]
training loss: 363.566864  [66560/99840], accuracy 45.44% [30245/66560]
training loss: 359.576447  [69120/99840], accuracy 45.78% [31641/69120]
training loss: 362.242157  [71680/99840], accuracy 46.08% [33031/71680]
training loss: 350.008026  [74240/99840], accuracy 46.41% [34457/74240]
training loss: 358.629059  [76800/99840], accuracy 46.73% [35891/76800]
training loss: 366.867218  [79360/99840], accuracy 47.00% [37299/79360]
training loss: 362.295074  [81920/99840], accuracy 47.34% [38783/81920]
training loss: 354.211060  [84480/99840], accuracy 47.63% [40241/84480]
training loss: 353.502594  [87040/99840], accuracy 47.92% [41710/87040]
training loss: 351.878143  [89600/99840], accuracy 48.12% [43114/89600]
training loss: 355.978210  [92160/99840], accuracy 48.39% [44596/92160]
training loss: 360.639343  [94720/99840], accuracy 48.62% [46053/94720]
training loss: 355.369751  [97280/99840], accuracy 48.86% [47533/97280]
training loss: 359.719177  [99840/99840], accuracy 49.10% [49024/99840]
training avg loss: 2.863578  [99840/99840]
training accuracy: 49.10% [49024/99840]
validation avg loss: 2.753812
validation accuracy: 58.65% [14639/24960]

saving model

Epoch 2
training loss: 352.954407  [ 2560/99840], accuracy 57.54% [ 1473/ 2560]
training loss: 360.744629  [ 5120/99840], accuracy 57.27% [ 2932/ 5120]
training loss: 347.721405  [ 7680/99840], accuracy 57.66% [ 4428/ 7680]
training loss: 346.857880  [10240/99840], accuracy 57.88% [ 5927/10240]
training loss: 361.230835  [12800/99840], accuracy 58.19% [ 7448/12800]
training loss: 343.559296  [15360/99840], accuracy 58.15% [ 8932/15360]
training loss: 350.604492  [17920/99840], accuracy 58.39% [10464/17920]
training loss: 352.765900  [20480/99840], accuracy 58.41% [11963/20480]
training loss: 340.327240  [23040/99840], accuracy 58.43% [13462/23040]
training loss: 347.635529  [25600/99840], accuracy 58.56% [14992/25600]
training loss: 345.341400  [28160/99840], accuracy 58.87% [16577/28160]
training loss: 347.555481  [30720/99840], accuracy 59.02% [18131/30720]
training loss: 338.593475  [33280/99840], accuracy 59.24% [19714/33280]
training loss: 349.707489  [35840/99840], accuracy 59.50% [21325/35840]
training loss: 346.961121  [38400/99840], accuracy 59.72% [22933/38400]
training loss: 341.882782  [40960/99840], accuracy 59.79% [24488/40960]
training loss: 348.676575  [43520/99840], accuracy 59.90% [26068/43520]
training loss: 347.272552  [46080/99840], accuracy 60.10% [27696/46080]
training loss: 343.761810  [48640/99840], accuracy 60.19% [29276/48640]
training loss: 339.881500  [51200/99840], accuracy 60.30% [30874/51200]
training loss: 346.775024  [53760/99840], accuracy 60.51% [32530/53760]
training loss: 353.935242  [56320/99840], accuracy 60.61% [34137/56320]
training loss: 357.638519  [58880/99840], accuracy 60.70% [35739/58880]
training loss: 338.737732  [61440/99840], accuracy 60.83% [37375/61440]
training loss: 357.654175  [64000/99840], accuracy 60.86% [38949/64000]
training loss: 342.446655  [66560/99840], accuracy 60.98% [40588/66560]
training loss: 343.431244  [69120/99840], accuracy 61.05% [42200/69120]
training loss: 335.609192  [71680/99840], accuracy 61.13% [43818/71680]
training loss: 344.830963  [74240/99840], accuracy 61.19% [45425/74240]
training loss: 346.099335  [76800/99840], accuracy 61.23% [47027/76800]
training loss: 347.608521  [79360/99840], accuracy 61.31% [48658/79360]
training loss: 347.849457  [81920/99840], accuracy 61.36% [50270/81920]
training loss: 338.419739  [84480/99840], accuracy 61.49% [51948/84480]
training loss: 346.840515  [87040/99840], accuracy 61.58% [53596/87040]
training loss: 341.058075  [89600/99840], accuracy 61.70% [55282/89600]
training loss: 343.135986  [92160/99840], accuracy 61.77% [56924/92160]
training loss: 343.747314  [94720/99840], accuracy 61.84% [58575/94720]
training loss: 349.112244  [97280/99840], accuracy 61.86% [60173/97280]
training loss: 342.930206  [99840/99840], accuracy 61.96% [61856/99840]
training avg loss: 2.725703  [99840/99840]
training accuracy: 61.96% [61856/99840]
validation avg loss: 2.670777
validation accuracy: 67.10% [16748/24960]

saving model

Epoch 3
training loss: 343.015533  [ 2560/99840], accuracy 67.38% [ 1725/ 2560]
training loss: 336.569031  [ 5120/99840], accuracy 68.01% [ 3482/ 5120]
training loss: 339.586029  [ 7680/99840], accuracy 67.15% [ 5157/ 7680]
training loss: 344.850983  [10240/99840], accuracy 66.92% [ 6853/10240]
training loss: 338.253845  [12800/99840], accuracy 67.38% [ 8624/12800]
training loss: 341.431946  [15360/99840], accuracy 67.40% [10352/15360]
training loss: 331.904907  [17920/99840], accuracy 67.61% [12115/17920]
training loss: 343.358124  [20480/99840], accuracy 67.71% [13867/20480]
training loss: 345.812958  [23040/99840], accuracy 67.89% [15641/23040]
training loss: 339.312805  [25600/99840], accuracy 67.88% [17378/25600]
training loss: 341.169250  [28160/99840], accuracy 68.06% [19166/28160]
training loss: 345.569885  [30720/99840], accuracy 68.23% [20960/30720]
training loss: 342.493774  [33280/99840], accuracy 68.46% [22782/33280]
training loss: 335.228333  [35840/99840], accuracy 68.43% [24524/35840]
training loss: 337.304016  [38400/99840], accuracy 68.42% [26274/38400]
training loss: 335.820557  [40960/99840], accuracy 68.51% [28061/40960]
training loss: 341.099579  [43520/99840], accuracy 68.56% [29837/43520]
training loss: 330.772461  [46080/99840], accuracy 68.63% [31626/46080]
training loss: 343.735138  [48640/99840], accuracy 68.61% [33371/48640]
training loss: 343.213196  [51200/99840], accuracy 68.71% [35179/51200]
training loss: 335.717285  [53760/99840], accuracy 68.78% [36975/53760]
training loss: 345.529999  [56320/99840], accuracy 68.83% [38763/56320]
training loss: 340.392456  [58880/99840], accuracy 68.95% [40595/58880]
training loss: 338.224274  [61440/99840], accuracy 68.99% [42389/61440]
training loss: 334.644531  [64000/99840], accuracy 69.02% [44173/64000]
training loss: 336.480164  [66560/99840], accuracy 69.06% [45967/66560]
training loss: 336.357239  [69120/99840], accuracy 69.11% [47770/69120]
training loss: 333.578613  [71680/99840], accuracy 69.17% [49581/71680]
training loss: 333.295959  [74240/99840], accuracy 69.27% [51425/74240]
training loss: 344.102112  [76800/99840], accuracy 69.33% [53243/76800]
training loss: 338.226196  [79360/99840], accuracy 69.39% [55066/79360]
training loss: 327.975220  [81920/99840], accuracy 69.43% [56876/81920]
training loss: 335.720551  [84480/99840], accuracy 69.53% [58735/84480]
training loss: 339.072662  [87040/99840], accuracy 69.61% [60586/87040]
training loss: 331.685089  [89600/99840], accuracy 69.65% [62407/89600]
training loss: 340.980835  [92160/99840], accuracy 69.76% [64292/92160]
training loss: 338.049255  [94720/99840], accuracy 69.81% [66122/94720]
training loss: 335.521027  [97280/99840], accuracy 69.87% [67969/97280]
training loss: 332.790863  [99840/99840], accuracy 69.92% [69812/99840]
training avg loss: 2.647175  [99840/99840]
training accuracy: 69.92% [69812/99840]
validation avg loss: 2.607018
validation accuracy: 72.86% [18185/24960]

saving model

Epoch 4
training loss: 320.488220  [ 2560/99840], accuracy 72.62% [ 1859/ 2560]
training loss: 341.983032  [ 5120/99840], accuracy 72.58% [ 3716/ 5120]
training loss: 338.847717  [ 7680/99840], accuracy 72.67% [ 5581/ 7680]
training loss: 333.096497  [10240/99840], accuracy 72.52% [ 7426/10240]
training loss: 342.487762  [12800/99840], accuracy 72.56% [ 9288/12800]
training loss: 334.063293  [15360/99840], accuracy 72.58% [11149/15360]
training loss: 336.022369  [17920/99840], accuracy 72.50% [12992/17920]
training loss: 333.989563  [20480/99840], accuracy 72.56% [14860/20480]
training loss: 334.132843  [23040/99840], accuracy 72.76% [16765/23040]
training loss: 336.226532  [25600/99840], accuracy 72.61% [18587/25600]
training loss: 331.783051  [28160/99840], accuracy 72.65% [20458/28160]
training loss: 333.688873  [30720/99840], accuracy 72.81% [22368/30720]
training loss: 334.457001  [33280/99840], accuracy 72.83% [24237/33280]
training loss: 330.167145  [35840/99840], accuracy 72.89% [26125/35840]
training loss: 339.272369  [38400/99840], accuracy 73.03% [28044/38400]
training loss: 326.126221  [40960/99840], accuracy 73.26% [30008/40960]
training loss: 328.870483  [43520/99840], accuracy 73.40% [31945/43520]
training loss: 333.774567  [46080/99840], accuracy 73.55% [33891/46080]
training loss: 330.809204  [48640/99840], accuracy 73.68% [35836/48640]
training loss: 327.948151  [51200/99840], accuracy 73.84% [37808/51200]
training loss: 333.770447  [53760/99840], accuracy 73.95% [39754/53760]
training loss: 325.684418  [56320/99840], accuracy 74.07% [41717/56320]
training loss: 330.759918  [58880/99840], accuracy 74.14% [43652/58880]
training loss: 333.526642  [61440/99840], accuracy 74.19% [45584/61440]
training loss: 331.147888  [64000/99840], accuracy 74.28% [47538/64000]
training loss: 334.130554  [66560/99840], accuracy 74.32% [49467/66560]
training loss: 336.367737  [69120/99840], accuracy 74.40% [51426/69120]
training loss: 327.191742  [71680/99840], accuracy 74.50% [53401/71680]
training loss: 325.168335  [74240/99840], accuracy 74.49% [55303/74240]
training loss: 332.510864  [76800/99840], accuracy 74.58% [57279/76800]
training loss: 329.431793  [79360/99840], accuracy 74.64% [59235/79360]
training loss: 324.195404  [81920/99840], accuracy 74.70% [61192/81920]
training loss: 327.746155  [84480/99840], accuracy 74.74% [63142/84480]
training loss: 322.063110  [87040/99840], accuracy 74.79% [65099/87040]
training loss: 327.031799  [89600/99840], accuracy 74.81% [67027/89600]
training loss: 330.993073  [92160/99840], accuracy 74.88% [69009/92160]
training loss: 337.158203  [94720/99840], accuracy 74.94% [70979/94720]
training loss: 323.796600  [97280/99840], accuracy 74.98% [72941/97280]
training loss: 329.006683  [99840/99840], accuracy 75.03% [74910/99840]
training avg loss: 2.592604  [99840/99840]
training accuracy: 75.03% [74910/99840]
validation avg loss: 2.561119
validation accuracy: 77.18% [19263/24960]

saving model

Epoch 5
training loss: 327.994568  [ 2560/99840], accuracy 77.27% [ 1978/ 2560]
training loss: 328.028809  [ 5120/99840], accuracy 77.13% [ 3949/ 5120]
training loss: 327.079254  [ 7680/99840], accuracy 76.98% [ 5912/ 7680]
training loss: 334.338379  [10240/99840], accuracy 76.79% [ 7863/10240]
training loss: 327.869537  [12800/99840], accuracy 76.85% [ 9837/12800]
training loss: 325.126648  [15360/99840], accuracy 76.93% [11816/15360]
training loss: 326.748047  [17920/99840], accuracy 77.12% [13820/17920]
training loss: 325.065002  [20480/99840], accuracy 77.26% [15822/20480]
training loss: 327.847961  [23040/99840], accuracy 77.39% [17831/23040]
training loss: 323.924957  [25600/99840], accuracy 77.48% [19834/25600]
training loss: 327.631378  [28160/99840], accuracy 77.51% [21826/28160]
training loss: 330.305450  [30720/99840], accuracy 77.57% [23831/30720]
training loss: 327.189758  [33280/99840], accuracy 77.51% [25795/33280]
training loss: 327.859100  [35840/99840], accuracy 77.55% [27795/35840]
training loss: 325.976166  [38400/99840], accuracy 77.54% [29777/38400]
training loss: 328.674835  [40960/99840], accuracy 77.57% [31773/40960]
training loss: 329.089844  [43520/99840], accuracy 77.54% [33744/43520]
training loss: 321.476532  [46080/99840], accuracy 77.51% [35718/46080]
training loss: 328.976990  [48640/99840], accuracy 77.46% [37678/48640]
training loss: 319.325317  [51200/99840], accuracy 77.50% [39682/51200]
training loss: 325.778259  [53760/99840], accuracy 77.50% [41663/53760]
training loss: 335.899506  [56320/99840], accuracy 77.51% [43653/56320]
training loss: 318.508484  [58880/99840], accuracy 77.56% [45666/58880]
training loss: 326.475616  [61440/99840], accuracy 77.58% [47666/61440]
training loss: 325.239502  [64000/99840], accuracy 77.58% [49650/64000]
training loss: 328.224823  [66560/99840], accuracy 77.60% [51652/66560]
training loss: 324.947998  [69120/99840], accuracy 77.54% [53599/69120]
training loss: 319.598114  [71680/99840], accuracy 77.58% [55611/71680]
training loss: 330.861328  [74240/99840], accuracy 77.53% [57555/74240]
training loss: 323.952423  [76800/99840], accuracy 77.52% [59533/76800]
training loss: 324.469879  [79360/99840], accuracy 77.51% [61514/79360]
training loss: 325.509827  [81920/99840], accuracy 77.55% [63527/81920]
training loss: 324.588013  [84480/99840], accuracy 77.55% [65512/84480]
training loss: 329.787140  [87040/99840], accuracy 77.58% [67526/87040]
training loss: 331.343811  [89600/99840], accuracy 77.60% [69533/89600]
training loss: 324.644043  [92160/99840], accuracy 77.62% [71539/92160]
training loss: 320.421356  [94720/99840], accuracy 77.65% [73550/94720]
training loss: 330.412598  [97280/99840], accuracy 77.64% [75533/97280]
training loss: 325.769165  [99840/99840], accuracy 77.67% [77550/99840]
training avg loss: 2.560729  [99840/99840]
training accuracy: 77.67% [77550/99840]
validation avg loss: 2.547370
validation accuracy: 78.30% [19544/24960]

saving model

Epoch 6
training loss: 330.048828  [ 2560/99840], accuracy 78.95% [ 2021/ 2560]
training loss: 328.909180  [ 5120/99840], accuracy 78.54% [ 4021/ 5120]
training loss: 325.690491  [ 7680/99840], accuracy 78.01% [ 5991/ 7680]
training loss: 331.461487  [10240/99840], accuracy 77.69% [ 7955/10240]
training loss: 327.414734  [12800/99840], accuracy 77.66% [ 9940/12800]
training loss: 322.619354  [15360/99840], accuracy 77.79% [11949/15360]
training loss: 327.730103  [17920/99840], accuracy 77.98% [13974/17920]
training loss: 324.343140  [20480/99840], accuracy 77.87% [15948/20480]
training loss: 332.552307  [23040/99840], accuracy 78.00% [17972/23040]
training loss: 321.137756  [25600/99840], accuracy 77.99% [19966/25600]
training loss: 325.279907  [28160/99840], accuracy 77.92% [21943/28160]
training loss: 328.631836  [30720/99840], accuracy 78.00% [23962/30720]
training loss: 320.351532  [33280/99840], accuracy 78.24% [26038/33280]
training loss: 331.639343  [35840/99840], accuracy 78.39% [28096/35840]
training loss: 320.075104  [38400/99840], accuracy 78.47% [30132/38400]
training loss: 319.371490  [40960/99840], accuracy 78.53% [32164/40960]
training loss: 321.840179  [43520/99840], accuracy 78.55% [34184/43520]
training loss: 325.922119  [46080/99840], accuracy 78.48% [36162/46080]
training loss: 320.945068  [48640/99840], accuracy 78.45% [38157/48640]
training loss: 328.095245  [51200/99840], accuracy 78.46% [40170/51200]
training loss: 329.524841  [53760/99840], accuracy 78.47% [42188/53760]
training loss: 325.923065  [56320/99840], accuracy 78.48% [44198/56320]
training loss: 323.596039  [58880/99840], accuracy 78.49% [46215/58880]
training loss: 322.035553  [61440/99840], accuracy 78.51% [48234/61440]
training loss: 320.886993  [64000/99840], accuracy 78.52% [50255/64000]
training loss: 321.129852  [66560/99840], accuracy 78.54% [52277/66560]
training loss: 326.641449  [69120/99840], accuracy 78.56% [54302/69120]
training loss: 330.655273  [71680/99840], accuracy 78.57% [56317/71680]
training loss: 323.451813  [74240/99840], accuracy 78.60% [58356/74240]
training loss: 324.909515  [76800/99840], accuracy 78.60% [60368/76800]
training loss: 331.870453  [79360/99840], accuracy 78.57% [62355/79360]
training loss: 319.542847  [81920/99840], accuracy 78.61% [64394/81920]
training loss: 324.845734  [84480/99840], accuracy 78.59% [66390/84480]
training loss: 322.891571  [87040/99840], accuracy 78.62% [68430/87040]
training loss: 320.353180  [89600/99840], accuracy 78.64% [70461/89600]
training loss: 320.244904  [92160/99840], accuracy 78.64% [72479/92160]
training loss: 328.154114  [94720/99840], accuracy 78.64% [74484/94720]
training loss: 321.018066  [97280/99840], accuracy 78.67% [76529/97280]
training loss: 327.628418  [99840/99840], accuracy 78.66% [78536/99840]
training avg loss: 2.547902  [99840/99840]
training accuracy: 78.66% [78536/99840]
validation avg loss: 2.540459
validation accuracy: 78.69% [19642/24960]

saving model

Epoch 7
training loss: 327.755920  [ 2560/99840], accuracy 78.95% [ 2021/ 2560]
training loss: 325.125916  [ 5120/99840], accuracy 79.10% [ 4050/ 5120]
training loss: 327.375153  [ 7680/99840], accuracy 78.59% [ 6036/ 7680]
training loss: 325.426758  [10240/99840], accuracy 78.82% [ 8071/10240]
training loss: 320.317902  [12800/99840], accuracy 79.05% [10118/12800]
training loss: 333.266754  [15360/99840], accuracy 79.09% [12148/15360]
training loss: 317.204132  [17920/99840], accuracy 79.22% [14197/17920]
training loss: 322.814758  [20480/99840], accuracy 79.22% [16225/20480]
training loss: 323.018860  [23040/99840], accuracy 79.17% [18240/23040]
training loss: 327.461761  [25600/99840], accuracy 79.16% [20266/25600]
training loss: 323.014923  [28160/99840], accuracy 79.12% [22279/28160]
training loss: 323.841827  [30720/99840], accuracy 79.19% [24326/30720]
training loss: 325.297058  [33280/99840], accuracy 79.37% [26415/33280]
training loss: 325.800598  [35840/99840], accuracy 79.51% [28496/35840]
training loss: 319.003601  [38400/99840], accuracy 79.55% [30549/38400]
training loss: 323.306580  [40960/99840], accuracy 79.70% [32645/40960]
training loss: 321.787231  [43520/99840], accuracy 79.83% [34743/43520]
training loss: 321.169006  [46080/99840], accuracy 80.01% [36868/46080]
training loss: 326.372620  [48640/99840], accuracy 80.07% [38947/48640]
training loss: 327.968445  [51200/99840], accuracy 80.21% [41065/51200]
training loss: 319.387512  [53760/99840], accuracy 80.32% [43178/53760]
training loss: 317.658508  [56320/99840], accuracy 80.40% [45280/56320]
training loss: 322.287140  [58880/99840], accuracy 80.52% [47412/58880]
training loss: 327.472046  [61440/99840], accuracy 80.65% [49552/61440]
training loss: 320.411072  [64000/99840], accuracy 80.72% [51663/64000]
training loss: 320.446442  [66560/99840], accuracy 80.82% [53796/66560]
training loss: 321.039490  [69120/99840], accuracy 80.90% [55918/69120]
training loss: 326.532227  [71680/99840], accuracy 80.94% [58021/71680]
training loss: 317.653748  [74240/99840], accuracy 81.03% [60158/74240]
training loss: 323.632599  [76800/99840], accuracy 81.08% [62272/76800]
training loss: 328.986816  [79360/99840], accuracy 81.11% [64367/79360]
training loss: 325.201691  [81920/99840], accuracy 81.19% [66510/81920]
training loss: 320.126831  [84480/99840], accuracy 81.22% [68614/84480]
training loss: 317.829407  [87040/99840], accuracy 81.27% [70737/87040]
training loss: 324.187012  [89600/99840], accuracy 81.29% [72839/89600]
training loss: 334.002045  [92160/99840], accuracy 81.31% [74931/92160]
training loss: 321.467255  [94720/99840], accuracy 81.36% [77061/94720]
training loss: 322.811401  [97280/99840], accuracy 81.39% [79173/97280]
training loss: 324.606506  [99840/99840], accuracy 81.45% [81316/99840]
training avg loss: 2.520735  [99840/99840]
training accuracy: 81.45% [81316/99840]
validation avg loss: 2.500822
validation accuracy: 82.80% [20667/24960]

saving model

Epoch 8
training loss: 320.023346  [ 2560/99840], accuracy 83.32% [ 2133/ 2560]
training loss: 322.619995  [ 5120/99840], accuracy 83.38% [ 4269/ 5120]
training loss: 318.876251  [ 7680/99840], accuracy 83.26% [ 6394/ 7680]
training loss: 318.403107  [10240/99840], accuracy 83.34% [ 8534/10240]
training loss: 325.351746  [12800/99840], accuracy 83.29% [10661/12800]
training loss: 318.869812  [15360/99840], accuracy 83.19% [12778/15360]
training loss: 325.520782  [17920/99840], accuracy 82.98% [14870/17920]
training loss: 316.621887  [20480/99840], accuracy 83.02% [17002/20480]
training loss: 320.670532  [23040/99840], accuracy 83.11% [19148/23040]
training loss: 324.177338  [25600/99840], accuracy 83.14% [21285/25600]
training loss: 316.419495  [28160/99840], accuracy 83.04% [23383/28160]
training loss: 318.664032  [30720/99840], accuracy 83.13% [25536/30720]
training loss: 320.869049  [33280/99840], accuracy 82.98% [27616/33280]
training loss: 324.782349  [35840/99840], accuracy 82.97% [29737/35840]
training loss: 321.356354  [38400/99840], accuracy 83.07% [31899/38400]
training loss: 321.792114  [40960/99840], accuracy 83.01% [34002/40960]
training loss: 317.802490  [43520/99840], accuracy 83.04% [36138/43520]
training loss: 317.537537  [46080/99840], accuracy 83.12% [38302/46080]
training loss: 314.441071  [48640/99840], accuracy 83.07% [40403/48640]
training loss: 315.113068  [51200/99840], accuracy 83.11% [42553/51200]
training loss: 318.710083  [53760/99840], accuracy 83.13% [44691/53760]
training loss: 313.697083  [56320/99840], accuracy 83.15% [46829/56320]
training loss: 320.520050  [58880/99840], accuracy 83.16% [48963/58880]
training loss: 321.419678  [61440/99840], accuracy 83.15% [51087/61440]
training loss: 322.462646  [64000/99840], accuracy 83.15% [53215/64000]
training loss: 320.775391  [66560/99840], accuracy 83.19% [55372/66560]
training loss: 319.890015  [69120/99840], accuracy 83.21% [57512/69120]
training loss: 324.378815  [71680/99840], accuracy 83.24% [59663/71680]
training loss: 324.838104  [74240/99840], accuracy 83.22% [61784/74240]
training loss: 324.362213  [76800/99840], accuracy 83.23% [63922/76800]
training loss: 313.376587  [79360/99840], accuracy 83.28% [66090/79360]
training loss: 317.786957  [81920/99840], accuracy 83.27% [68212/81920]
training loss: 320.553619  [84480/99840], accuracy 83.30% [70372/84480]
training loss: 319.024841  [87040/99840], accuracy 83.33% [72533/87040]
training loss: 321.277222  [89600/99840], accuracy 83.30% [74640/89600]
training loss: 317.784454  [92160/99840], accuracy 83.30% [76770/92160]
training loss: 328.505524  [94720/99840], accuracy 83.29% [78893/94720]
training loss: 314.616516  [97280/99840], accuracy 83.32% [81051/97280]
training loss: 313.696472  [99840/99840], accuracy 83.29% [83156/99840]
training avg loss: 2.500183  [99840/99840]
training accuracy: 83.29% [83156/99840]
validation avg loss: 2.494598
validation accuracy: 83.29% [20789/24960]

saving model

Epoch 9
training loss: 315.878815  [ 2560/99840], accuracy 83.79% [ 2145/ 2560]
training loss: 325.769104  [ 5120/99840], accuracy 83.55% [ 4278/ 5120]
training loss: 314.375763  [ 7680/99840], accuracy 83.93% [ 6446/ 7680]
training loss: 322.228973  [10240/99840], accuracy 83.76% [ 8577/10240]
training loss: 318.431976  [12800/99840], accuracy 83.84% [10732/12800]
training loss: 316.128693  [15360/99840], accuracy 83.91% [12889/15360]
training loss: 317.231598  [17920/99840], accuracy 83.95% [15044/17920]
training loss: 321.142151  [20480/99840], accuracy 83.99% [17201/20480]
training loss: 314.771576  [23040/99840], accuracy 84.08% [19373/23040]
training loss: 323.736725  [25600/99840], accuracy 84.07% [21523/25600]
training loss: 319.967194  [28160/99840], accuracy 83.97% [23647/28160]
training loss: 318.201782  [30720/99840], accuracy 83.96% [25793/30720]
training loss: 321.984375  [33280/99840], accuracy 83.98% [27950/33280]
training loss: 314.610168  [35840/99840], accuracy 83.95% [30088/35840]
training loss: 317.558319  [38400/99840], accuracy 83.98% [32248/38400]
training loss: 320.295837  [40960/99840], accuracy 83.92% [34373/40960]
training loss: 313.811737  [43520/99840], accuracy 83.99% [36551/43520]
training loss: 313.666016  [46080/99840], accuracy 83.96% [38689/46080]
training loss: 317.320221  [48640/99840], accuracy 84.06% [40886/48640]
training loss: 318.307098  [51200/99840], accuracy 84.11% [43063/51200]
training loss: 322.677643  [53760/99840], accuracy 84.14% [45231/53760]
training loss: 312.943878  [56320/99840], accuracy 84.12% [47374/56320]
training loss: 319.084503  [58880/99840], accuracy 84.15% [49550/58880]
training loss: 318.042755  [61440/99840], accuracy 84.23% [51748/61440]
training loss: 316.081177  [64000/99840], accuracy 84.22% [53898/64000]
training loss: 319.593201  [66560/99840], accuracy 84.28% [56096/66560]
training loss: 316.511353  [69120/99840], accuracy 84.27% [58247/69120]
training loss: 317.757324  [71680/99840], accuracy 84.28% [60412/71680]
training loss: 315.169525  [74240/99840], accuracy 84.31% [62591/74240]
training loss: 316.066528  [76800/99840], accuracy 84.33% [64769/76800]
training loss: 319.960144  [79360/99840], accuracy 84.33% [66927/79360]
training loss: 322.848724  [81920/99840], accuracy 84.34% [69090/81920]
training loss: 324.211243  [84480/99840], accuracy 84.37% [71275/84480]
training loss: 325.956146  [87040/99840], accuracy 84.41% [73469/87040]
training loss: 316.943451  [89600/99840], accuracy 84.43% [75652/89600]
training loss: 318.529602  [92160/99840], accuracy 84.46% [77836/92160]
training loss: 313.180267  [94720/99840], accuracy 84.48% [80016/94720]
training loss: 317.771118  [97280/99840], accuracy 84.45% [82151/97280]
training loss: 317.803772  [99840/99840], accuracy 84.47% [84331/99840]
training avg loss: 2.488328  [99840/99840]
training accuracy: 84.47% [84331/99840]
validation avg loss: 2.481041
validation accuracy: 84.73% [21148/24960]

saving model

Epoch 10
training loss: 318.328491  [ 2560/99840], accuracy 84.73% [ 2169/ 2560]
training loss: 317.443787  [ 5120/99840], accuracy 84.94% [ 4349/ 5120]
training loss: 319.133972  [ 7680/99840], accuracy 85.17% [ 6541/ 7680]
training loss: 321.829376  [10240/99840], accuracy 85.10% [ 8714/10240]
training loss: 314.810516  [12800/99840], accuracy 85.24% [10911/12800]
training loss: 319.710999  [15360/99840], accuracy 85.27% [13097/15360]
training loss: 310.207214  [17920/99840], accuracy 85.46% [15314/17920]
training loss: 321.370972  [20480/99840], accuracy 85.42% [17495/20480]
training loss: 319.957092  [23040/99840], accuracy 85.43% [19683/23040]
training loss: 313.042847  [25600/99840], accuracy 85.46% [21878/25600]
training loss: 316.013916  [28160/99840], accuracy 85.50% [24078/28160]
training loss: 317.168427  [30720/99840], accuracy 85.55% [26281/30720]
training loss: 312.686737  [33280/99840], accuracy 85.55% [28470/33280]
training loss: 310.853760  [35840/99840], accuracy 85.55% [30661/35840]
training loss: 322.112946  [38400/99840], accuracy 85.55% [32853/38400]
training loss: 317.381897  [40960/99840], accuracy 85.52% [35029/40960]
training loss: 319.063965  [43520/99840], accuracy 85.56% [37237/43520]
training loss: 324.582458  [46080/99840], accuracy 85.53% [39413/46080]
training loss: 310.036896  [48640/99840], accuracy 85.53% [41601/48640]
training loss: 320.012543  [51200/99840], accuracy 85.53% [43793/51200]
training loss: 313.695251  [53760/99840], accuracy 85.53% [45979/53760]
training loss: 317.712036  [56320/99840], accuracy 85.47% [48137/56320]
training loss: 323.598328  [58880/99840], accuracy 85.49% [50336/58880]
training loss: 315.840424  [61440/99840], accuracy 85.51% [52536/61440]
training loss: 313.656830  [64000/99840], accuracy 85.52% [54732/64000]
training loss: 320.159424  [66560/99840], accuracy 85.52% [56920/66560]
training loss: 320.441864  [69120/99840], accuracy 85.53% [59115/69120]
training loss: 318.451904  [71680/99840], accuracy 85.54% [61315/71680]
training loss: 317.295105  [74240/99840], accuracy 85.56% [63517/74240]
training loss: 318.850830  [76800/99840], accuracy 85.55% [65704/76800]
training loss: 320.650726  [79360/99840], accuracy 85.57% [67912/79360]
training loss: 317.232391  [81920/99840], accuracy 85.64% [70157/81920]
training loss: 313.638794  [84480/99840], accuracy 85.64% [72349/84480]
training loss: 313.958374  [87040/99840], accuracy 85.67% [74564/87040]
training loss: 314.149506  [89600/99840], accuracy 85.71% [76796/89600]
training loss: 314.400208  [92160/99840], accuracy 85.74% [79014/92160]
training loss: 321.202057  [94720/99840], accuracy 85.75% [81219/94720]
training loss: 318.706757  [97280/99840], accuracy 85.75% [83414/97280]
training loss: 313.601318  [99840/99840], accuracy 85.77% [85636/99840]
training avg loss: 2.474809  [99840/99840]
training accuracy: 85.77% [85636/99840]
validation avg loss: 2.470604
validation accuracy: 85.76% [21405/24960]

saving model

Epoch 11
training loss: 311.569977  [ 2560/99840], accuracy 85.43% [ 2187/ 2560]
training loss: 313.308380  [ 5120/99840], accuracy 85.76% [ 4391/ 5120]
training loss: 313.737061  [ 7680/99840], accuracy 86.07% [ 6610/ 7680]
training loss: 314.915283  [10240/99840], accuracy 86.21% [ 8828/10240]
training loss: 313.610138  [12800/99840], accuracy 86.41% [11061/12800]
training loss: 311.376343  [15360/99840], accuracy 86.50% [13286/15360]
training loss: 315.748627  [17920/99840], accuracy 86.46% [15493/17920]
training loss: 312.360657  [20480/99840], accuracy 86.57% [17729/20480]
training loss: 315.118042  [23040/99840], accuracy 86.64% [19961/23040]
training loss: 311.847046  [25600/99840], accuracy 86.69% [22193/25600]
training loss: 325.342499  [28160/99840], accuracy 86.62% [24393/28160]
training loss: 311.450684  [30720/99840], accuracy 86.54% [26586/30720]
training loss: 311.431061  [33280/99840], accuracy 86.59% [28816/33280]
training loss: 319.731781  [35840/99840], accuracy 86.57% [31025/35840]
training loss: 317.314484  [38400/99840], accuracy 86.62% [33263/38400]
training loss: 316.880554  [40960/99840], accuracy 86.60% [35471/40960]
training loss: 319.601471  [43520/99840], accuracy 86.65% [37710/43520]
training loss: 317.140198  [46080/99840], accuracy 86.69% [39947/46080]
training loss: 313.127655  [48640/99840], accuracy 86.74% [42192/48640]
training loss: 315.914307  [51200/99840], accuracy 86.84% [44463/51200]
training loss: 315.989716  [53760/99840], accuracy 86.95% [46746/53760]
training loss: 314.572021  [56320/99840], accuracy 87.02% [49012/56320]
training loss: 310.152069  [58880/99840], accuracy 87.13% [51302/58880]
training loss: 307.158569  [61440/99840], accuracy 87.25% [53608/61440]
training loss: 317.677551  [64000/99840], accuracy 87.29% [55868/64000]
training loss: 306.967957  [66560/99840], accuracy 87.41% [58178/66560]
training loss: 309.772705  [69120/99840], accuracy 87.51% [60487/69120]
training loss: 311.009613  [71680/99840], accuracy 87.57% [62769/71680]
training loss: 308.645142  [74240/99840], accuracy 87.68% [65090/74240]
training loss: 313.324615  [76800/99840], accuracy 87.72% [67366/76800]
training loss: 314.007477  [79360/99840], accuracy 87.76% [69650/79360]
training loss: 317.886230  [81920/99840], accuracy 87.84% [71957/81920]
training loss: 314.011536  [84480/99840], accuracy 87.88% [74242/84480]
training loss: 312.762726  [87040/99840], accuracy 87.96% [76558/87040]
training loss: 312.702393  [89600/99840], accuracy 88.01% [78855/89600]
training loss: 313.049469  [92160/99840], accuracy 88.04% [81140/92160]
training loss: 315.031830  [94720/99840], accuracy 88.08% [83430/94720]
training loss: 316.222748  [97280/99840], accuracy 88.11% [85715/97280]
training loss: 303.412384  [99840/99840], accuracy 88.19% [88049/99840]
training avg loss: 2.452191  [99840/99840]
training accuracy: 88.19% [88049/99840]
validation avg loss: 2.432534
validation accuracy: 89.69% [22386/24960]

saving model

Epoch 12
training loss: 315.833893  [ 2560/99840], accuracy 89.26% [ 2285/ 2560]
training loss: 312.303619  [ 5120/99840], accuracy 89.49% [ 4582/ 5120]
training loss: 310.105408  [ 7680/99840], accuracy 89.95% [ 6908/ 7680]
training loss: 314.518494  [10240/99840], accuracy 89.83% [ 9199/10240]
training loss: 308.443726  [12800/99840], accuracy 89.99% [11519/12800]
training loss: 309.695251  [15360/99840], accuracy 90.09% [13838/15360]
training loss: 305.630524  [17920/99840], accuracy 90.23% [16169/17920]
training loss: 314.515106  [20480/99840], accuracy 90.22% [18477/20480]
training loss: 311.166077  [23040/99840], accuracy 90.23% [20789/23040]
training loss: 313.138550  [25600/99840], accuracy 90.21% [23093/25600]
training loss: 308.563782  [28160/99840], accuracy 90.21% [25402/28160]
training loss: 310.604919  [30720/99840], accuracy 90.17% [27701/30720]
training loss: 308.282959  [33280/99840], accuracy 90.15% [30003/33280]
training loss: 309.075562  [35840/99840], accuracy 90.19% [32325/35840]
training loss: 309.786316  [38400/99840], accuracy 90.16% [34621/38400]
training loss: 309.269409  [40960/99840], accuracy 90.18% [36936/40960]
training loss: 308.175385  [43520/99840], accuracy 90.17% [39243/43520]
training loss: 309.193817  [46080/99840], accuracy 90.23% [41576/46080]
training loss: 314.939606  [48640/99840], accuracy 90.24% [43892/48640]
training loss: 310.319946  [51200/99840], accuracy 90.25% [46207/51200]
training loss: 312.107422  [53760/99840], accuracy 90.27% [48529/53760]
training loss: 309.759949  [56320/99840], accuracy 90.29% [50852/56320]
training loss: 308.161560  [58880/99840], accuracy 90.32% [53183/58880]
training loss: 311.854187  [61440/99840], accuracy 90.35% [55510/61440]
training loss: 312.363251  [64000/99840], accuracy 90.37% [57837/64000]
training loss: 312.310120  [66560/99840], accuracy 90.36% [60143/66560]
training loss: 310.966248  [69120/99840], accuracy 90.36% [62460/69120]
training loss: 315.843689  [71680/99840], accuracy 90.34% [64755/71680]
training loss: 308.459015  [74240/99840], accuracy 90.33% [67061/74240]
training loss: 305.375671  [76800/99840], accuracy 90.32% [69368/76800]
training loss: 309.555786  [79360/99840], accuracy 90.32% [71680/79360]
training loss: 311.975739  [81920/99840], accuracy 90.31% [73979/81920]
training loss: 307.098480  [84480/99840], accuracy 90.31% [76290/84480]
training loss: 308.604401  [87040/99840], accuracy 90.29% [78587/87040]
training loss: 309.605713  [89600/99840], accuracy 90.29% [80902/89600]
training loss: 305.226318  [92160/99840], accuracy 90.28% [83202/92160]
training loss: 316.470428  [94720/99840], accuracy 90.27% [85502/94720]
training loss: 314.212769  [97280/99840], accuracy 90.27% [87817/97280]
training loss: 315.612854  [99840/99840], accuracy 90.25% [90104/99840]
training avg loss: 2.429977  [99840/99840]
training accuracy: 90.25% [90104/99840]
validation avg loss: 2.428530
validation accuracy: 89.91% [22441/24960]

saving model

Epoch 13
training loss: 307.886475  [ 2560/99840], accuracy 90.20% [ 2309/ 2560]
training loss: 309.261047  [ 5120/99840], accuracy 90.68% [ 4643/ 5120]
training loss: 311.926483  [ 7680/99840], accuracy 90.72% [ 6967/ 7680]
training loss: 310.480499  [10240/99840], accuracy 90.62% [ 9280/10240]
training loss: 308.678986  [12800/99840], accuracy 90.74% [11615/12800]
training loss: 312.475739  [15360/99840], accuracy 90.82% [13950/15360]
training loss: 313.002350  [17920/99840], accuracy 90.83% [16276/17920]
training loss: 308.003693  [20480/99840], accuracy 90.87% [18610/20480]
training loss: 311.850555  [23040/99840], accuracy 90.86% [20934/23040]
training loss: 307.429749  [25600/99840], accuracy 90.78% [23240/25600]
training loss: 309.666321  [28160/99840], accuracy 90.70% [25542/28160]
training loss: 310.924805  [30720/99840], accuracy 90.74% [27874/30720]
training loss: 313.149750  [33280/99840], accuracy 90.72% [30190/33280]
training loss: 309.354095  [35840/99840], accuracy 90.70% [32507/35840]
training loss: 309.913025  [38400/99840], accuracy 90.68% [34821/38400]
training loss: 311.200684  [40960/99840], accuracy 90.66% [37136/40960]
training loss: 315.337952  [43520/99840], accuracy 90.62% [39438/43520]
training loss: 306.271759  [46080/99840], accuracy 90.58% [41738/46080]
training loss: 307.684784  [48640/99840], accuracy 90.65% [44091/48640]
training loss: 312.924683  [51200/99840], accuracy 90.63% [46404/51200]
training loss: 306.501740  [53760/99840], accuracy 90.62% [48715/53760]
training loss: 313.588470  [56320/99840], accuracy 90.65% [51054/56320]
training loss: 305.948334  [58880/99840], accuracy 90.71% [53411/58880]
training loss: 310.074585  [61440/99840], accuracy 90.70% [55726/61440]
training loss: 309.699280  [64000/99840], accuracy 90.69% [58042/64000]
training loss: 312.774933  [66560/99840], accuracy 90.70% [60373/66560]
training loss: 307.970245  [69120/99840], accuracy 90.69% [62687/69120]
training loss: 311.545197  [71680/99840], accuracy 90.68% [64996/71680]
training loss: 306.844818  [74240/99840], accuracy 90.71% [67345/74240]
training loss: 311.932526  [76800/99840], accuracy 90.75% [69699/76800]
training loss: 307.412476  [79360/99840], accuracy 90.75% [72021/79360]
training loss: 316.307343  [81920/99840], accuracy 90.75% [74345/81920]
training loss: 308.555389  [84480/99840], accuracy 90.75% [76662/84480]
training loss: 308.510651  [87040/99840], accuracy 90.76% [78995/87040]
training loss: 308.034271  [89600/99840], accuracy 90.76% [81317/89600]
training loss: 309.651581  [92160/99840], accuracy 90.76% [83648/92160]
training loss: 316.610748  [94720/99840], accuracy 90.75% [85960/94720]
training loss: 312.011627  [97280/99840], accuracy 90.73% [88261/97280]
training loss: 307.058655  [99840/99840], accuracy 90.74% [90597/99840]
training avg loss: 2.424225  [99840/99840]
training accuracy: 90.74% [90597/99840]
validation avg loss: 2.426128
validation accuracy: 90.15% [22502/24960]

saving model

Epoch 14
training loss: 309.549408  [ 2560/99840], accuracy 90.94% [ 2328/ 2560]
training loss: 316.626709  [ 5120/99840], accuracy 90.84% [ 4651/ 5120]
training loss: 316.634796  [ 7680/99840], accuracy 90.94% [ 6984/ 7680]
training loss: 307.756256  [10240/99840], accuracy 90.90% [ 9308/10240]
training loss: 318.004852  [12800/99840], accuracy 90.76% [11617/12800]
training loss: 310.628876  [15360/99840], accuracy 90.74% [13938/15360]
training loss: 309.929626  [17920/99840], accuracy 90.86% [16283/17920]
training loss: 310.753662  [20480/99840], accuracy 90.89% [18614/20480]
training loss: 311.082275  [23040/99840], accuracy 90.94% [20952/23040]
training loss: 312.257355  [25600/99840], accuracy 90.91% [23273/25600]
training loss: 305.798492  [28160/99840], accuracy 90.94% [25609/28160]
training loss: 310.695526  [30720/99840], accuracy 90.98% [27948/30720]
training loss: 306.342163  [33280/99840], accuracy 90.97% [30274/33280]
training loss: 311.469391  [35840/99840], accuracy 90.91% [32581/35840]
training loss: 311.090057  [38400/99840], accuracy 90.86% [34889/38400]
training loss: 308.859222  [40960/99840], accuracy 90.83% [37206/40960]
training loss: 306.969391  [43520/99840], accuracy 90.88% [39552/43520]
training loss: 311.809021  [46080/99840], accuracy 90.85% [41864/46080]
training loss: 308.796783  [48640/99840], accuracy 90.91% [44217/48640]
training loss: 309.589233  [51200/99840], accuracy 90.98% [46580/51200]
training loss: 310.385406  [53760/99840], accuracy 90.97% [48903/53760]
training loss: 306.713318  [56320/99840], accuracy 90.99% [51243/56320]
training loss: 310.417877  [58880/99840], accuracy 91.04% [53604/58880]
training loss: 306.453033  [61440/99840], accuracy 91.01% [55917/61440]
training loss: 310.137604  [64000/99840], accuracy 91.00% [58241/64000]
training loss: 314.121063  [66560/99840], accuracy 91.00% [60569/66560]
training loss: 312.402161  [69120/99840], accuracy 91.00% [62899/69120]
training loss: 305.432495  [71680/99840], accuracy 90.98% [65218/71680]
training loss: 312.137970  [74240/99840], accuracy 91.00% [67558/74240]
training loss: 309.375427  [76800/99840], accuracy 91.00% [69886/76800]
training loss: 307.609772  [79360/99840], accuracy 91.01% [72222/79360]
training loss: 309.780640  [81920/99840], accuracy 91.00% [74548/81920]
training loss: 305.317108  [84480/99840], accuracy 91.00% [76877/84480]
training loss: 302.097870  [87040/99840], accuracy 90.99% [79198/87040]
training loss: 306.534607  [89600/99840], accuracy 91.00% [81534/89600]
training loss: 311.855194  [92160/99840], accuracy 90.99% [83858/92160]
training loss: 309.663849  [94720/99840], accuracy 91.01% [86209/94720]
training loss: 312.753967  [97280/99840], accuracy 91.01% [88530/97280]
training loss: 312.055054  [99840/99840], accuracy 91.01% [90869/99840]
training avg loss: 2.420370  [99840/99840]
training accuracy: 91.01% [90869/99840]
validation avg loss: 2.424083
validation accuracy: 90.28% [22535/24960]

saving model

Epoch 15
training loss: 309.062012  [ 2560/99840], accuracy 91.37% [ 2339/ 2560]
training loss: 306.369141  [ 5120/99840], accuracy 91.50% [ 4685/ 5120]
training loss: 304.453461  [ 7680/99840], accuracy 91.51% [ 7028/ 7680]
training loss: 310.312500  [10240/99840], accuracy 91.59% [ 9379/10240]
training loss: 309.731506  [12800/99840], accuracy 91.41% [11701/12800]
training loss: 309.905426  [15360/99840], accuracy 91.35% [14032/15360]
training loss: 311.027222  [17920/99840], accuracy 91.23% [16349/17920]
training loss: 312.993866  [20480/99840], accuracy 91.18% [18674/20480]
training loss: 308.017395  [23040/99840], accuracy 91.10% [20990/23040]
training loss: 305.231506  [25600/99840], accuracy 91.12% [23328/25600]
training loss: 310.960266  [28160/99840], accuracy 91.17% [25673/28160]
training loss: 309.835571  [30720/99840], accuracy 91.14% [27998/30720]
training loss: 306.506012  [33280/99840], accuracy 91.20% [30351/33280]
training loss: 311.590820  [35840/99840], accuracy 91.25% [32705/35840]
training loss: 307.833374  [38400/99840], accuracy 91.22% [35029/38400]
training loss: 310.998108  [40960/99840], accuracy 91.18% [37346/40960]
training loss: 311.392822  [43520/99840], accuracy 91.16% [39674/43520]
training loss: 313.557251  [46080/99840], accuracy 91.12% [41990/46080]
training loss: 312.230164  [48640/99840], accuracy 91.17% [44346/48640]
training loss: 310.557465  [51200/99840], accuracy 91.20% [46693/51200]
training loss: 309.920685  [53760/99840], accuracy 91.18% [49018/53760]
training loss: 307.903198  [56320/99840], accuracy 91.20% [51365/56320]
training loss: 313.295593  [58880/99840], accuracy 91.18% [53686/58880]
training loss: 308.900726  [61440/99840], accuracy 91.18% [56022/61440]
training loss: 307.623444  [64000/99840], accuracy 91.21% [58375/64000]
training loss: 311.190186  [66560/99840], accuracy 91.22% [60716/66560]
training loss: 309.296600  [69120/99840], accuracy 91.25% [63073/69120]
training loss: 308.161407  [71680/99840], accuracy 91.24% [65398/71680]
training loss: 310.644287  [74240/99840], accuracy 91.26% [67752/74240]
training loss: 304.907898  [76800/99840], accuracy 91.25% [70082/76800]
training loss: 313.031311  [79360/99840], accuracy 91.24% [72410/79360]
training loss: 311.413635  [81920/99840], accuracy 91.25% [74751/81920]
training loss: 306.941040  [84480/99840], accuracy 91.22% [77062/84480]
training loss: 314.478394  [87040/99840], accuracy 91.21% [79385/87040]
training loss: 315.682556  [89600/99840], accuracy 91.19% [81707/89600]
training loss: 316.148682  [92160/99840], accuracy 91.19% [84038/92160]
training loss: 308.195679  [94720/99840], accuracy 91.21% [86391/94720]
training loss: 310.653229  [97280/99840], accuracy 91.20% [88722/97280]
training loss: 306.947754  [99840/99840], accuracy 91.22% [91072/99840]
training avg loss: 2.417863  [99840/99840]
training accuracy: 91.22% [91072/99840]
validation avg loss: 2.423693
validation accuracy: 90.23% [22522/24960]

saving model

Epoch 16
training loss: 310.687592  [ 2560/99840], accuracy 92.46% [ 2367/ 2560]
training loss: 307.311951  [ 5120/99840], accuracy 92.19% [ 4720/ 5120]
training loss: 306.475952  [ 7680/99840], accuracy 91.73% [ 7045/ 7680]
training loss: 308.140625  [10240/99840], accuracy 91.70% [ 9390/10240]
training loss: 311.939911  [12800/99840], accuracy 91.69% [11736/12800]
training loss: 309.078247  [15360/99840], accuracy 91.70% [14085/15360]
training loss: 313.170471  [17920/99840], accuracy 91.63% [16420/17920]
training loss: 310.050079  [20480/99840], accuracy 91.60% [18759/20480]
training loss: 309.060089  [23040/99840], accuracy 91.45% [21070/23040]
training loss: 302.405304  [25600/99840], accuracy 91.53% [23431/25600]
training loss: 314.591156  [28160/99840], accuracy 91.45% [25751/28160]
training loss: 312.786926  [30720/99840], accuracy 91.48% [28103/30720]
training loss: 313.564453  [33280/99840], accuracy 91.45% [30435/33280]
training loss: 305.218262  [35840/99840], accuracy 91.44% [32773/35840]
training loss: 310.315582  [38400/99840], accuracy 91.42% [35106/38400]
training loss: 311.607605  [40960/99840], accuracy 91.39% [37433/40960]
training loss: 306.495850  [43520/99840], accuracy 91.33% [39745/43520]
training loss: 307.033386  [46080/99840], accuracy 91.39% [42113/46080]
training loss: 308.742737  [48640/99840], accuracy 91.38% [44446/48640]
training loss: 308.896240  [51200/99840], accuracy 91.38% [46787/51200]
training loss: 309.330292  [53760/99840], accuracy 91.36% [49115/53760]
training loss: 307.106720  [56320/99840], accuracy 91.32% [51433/56320]
training loss: 310.985352  [58880/99840], accuracy 91.34% [53781/58880]
training loss: 309.797119  [61440/99840], accuracy 91.37% [56136/61440]
training loss: 307.450378  [64000/99840], accuracy 91.42% [58507/64000]
training loss: 307.041992  [66560/99840], accuracy 91.41% [60841/66560]
training loss: 305.835876  [69120/99840], accuracy 91.40% [63179/69120]
training loss: 310.912598  [71680/99840], accuracy 91.39% [65510/71680]
training loss: 306.097107  [74240/99840], accuracy 91.41% [67861/74240]
training loss: 304.349457  [76800/99840], accuracy 91.40% [70198/76800]
training loss: 309.620209  [79360/99840], accuracy 91.39% [72530/79360]
training loss: 311.192535  [81920/99840], accuracy 91.39% [74863/81920]
training loss: 319.593231  [84480/99840], accuracy 91.36% [77180/84480]
training loss: 306.188416  [87040/99840], accuracy 91.37% [79532/87040]
training loss: 303.983856  [89600/99840], accuracy 91.38% [81876/89600]
training loss: 303.862274  [92160/99840], accuracy 91.40% [84232/92160]
training loss: 307.910645  [94720/99840], accuracy 91.41% [86583/94720]
training loss: 305.902802  [97280/99840], accuracy 91.42% [88937/97280]
training loss: 315.972351  [99840/99840], accuracy 91.40% [91253/99840]
training avg loss: 2.414988  [99840/99840]
training accuracy: 91.40% [91253/99840]
validation avg loss: 2.421625
validation accuracy: 90.49% [22586/24960]

saving model

Epoch 17
training loss: 311.944061  [ 2560/99840], accuracy 91.64% [ 2346/ 2560]
training loss: 309.156738  [ 5120/99840], accuracy 91.39% [ 4679/ 5120]
training loss: 307.592438  [ 7680/99840], accuracy 91.64% [ 7038/ 7680]
training loss: 310.467621  [10240/99840], accuracy 91.67% [ 9387/10240]
training loss: 305.895081  [12800/99840], accuracy 91.52% [11714/12800]
training loss: 311.497559  [15360/99840], accuracy 91.44% [14045/15360]
training loss: 304.991913  [17920/99840], accuracy 91.43% [16384/17920]
training loss: 306.708649  [20480/99840], accuracy 91.46% [18730/20480]
training loss: 306.778564  [23040/99840], accuracy 91.54% [21090/23040]
training loss: 306.906433  [25600/99840], accuracy 91.46% [23414/25600]
training loss: 312.599152  [28160/99840], accuracy 91.46% [25755/28160]
training loss: 307.636566  [30720/99840], accuracy 91.46% [28095/30720]
training loss: 307.458374  [33280/99840], accuracy 91.47% [30441/33280]
training loss: 311.594055  [35840/99840], accuracy 91.50% [32793/35840]
training loss: 311.406891  [38400/99840], accuracy 91.51% [35139/38400]
training loss: 308.006561  [40960/99840], accuracy 91.51% [37483/40960]
training loss: 313.130096  [43520/99840], accuracy 91.51% [39827/43520]
training loss: 314.015594  [46080/99840], accuracy 91.51% [42170/46080]
training loss: 311.998871  [48640/99840], accuracy 91.53% [44522/48640]
training loss: 309.819275  [51200/99840], accuracy 91.56% [46881/51200]
training loss: 311.149780  [53760/99840], accuracy 91.58% [49235/53760]
training loss: 310.477905  [56320/99840], accuracy 91.59% [51586/56320]
training loss: 307.296051  [58880/99840], accuracy 91.62% [53945/58880]
training loss: 309.882507  [61440/99840], accuracy 91.59% [56272/61440]
training loss: 312.448853  [64000/99840], accuracy 91.57% [58602/64000]
training loss: 308.870636  [66560/99840], accuracy 91.59% [60960/66560]
training loss: 309.588989  [69120/99840], accuracy 91.59% [63308/69120]
training loss: 309.339905  [71680/99840], accuracy 91.61% [65664/71680]
training loss: 308.962402  [74240/99840], accuracy 91.59% [67999/74240]
training loss: 303.436340  [76800/99840], accuracy 91.59% [70342/76800]
training loss: 309.336975  [79360/99840], accuracy 91.56% [72664/79360]
training loss: 309.588928  [81920/99840], accuracy 91.57% [75012/81920]
training loss: 307.852448  [84480/99840], accuracy 91.56% [77352/84480]
training loss: 306.639526  [87040/99840], accuracy 91.59% [79721/87040]
training loss: 310.359985  [89600/99840], accuracy 91.61% [82086/89600]
training loss: 301.850464  [92160/99840], accuracy 91.61% [84431/92160]
training loss: 310.355530  [94720/99840], accuracy 91.62% [86779/94720]
training loss: 304.506287  [97280/99840], accuracy 91.62% [89125/97280]
training loss: 306.223114  [99840/99840], accuracy 91.60% [91456/99840]
training avg loss: 2.412560  [99840/99840]
training accuracy: 91.60% [91456/99840]
validation avg loss: 2.421547
validation accuracy: 90.33% [22546/24960]

saving model

Epoch 18
training loss: 313.325806  [ 2560/99840], accuracy 91.48% [ 2342/ 2560]
training loss: 306.436890  [ 5120/99840], accuracy 91.60% [ 4690/ 5120]
training loss: 309.002380  [ 7680/99840], accuracy 91.99% [ 7065/ 7680]
training loss: 311.488892  [10240/99840], accuracy 92.01% [ 9422/10240]
training loss: 312.286163  [12800/99840], accuracy 91.98% [11774/12800]
training loss: 311.334778  [15360/99840], accuracy 91.88% [14113/15360]
training loss: 306.232758  [17920/99840], accuracy 91.89% [16466/17920]
training loss: 311.261963  [20480/99840], accuracy 91.88% [18818/20480]
training loss: 309.614990  [23040/99840], accuracy 91.82% [21156/23040]
training loss: 305.563324  [25600/99840], accuracy 91.73% [23483/25600]
training loss: 309.813202  [28160/99840], accuracy 91.66% [25812/28160]
training loss: 305.735840  [30720/99840], accuracy 91.65% [28156/30720]
training loss: 306.901947  [33280/99840], accuracy 91.66% [30506/33280]
training loss: 311.771515  [35840/99840], accuracy 91.70% [32866/35840]
training loss: 310.692688  [38400/99840], accuracy 91.72% [35219/38400]
training loss: 315.129120  [40960/99840], accuracy 91.72% [37567/40960]
training loss: 314.301178  [43520/99840], accuracy 91.71% [39911/43520]
training loss: 306.257080  [46080/99840], accuracy 91.71% [42260/46080]
training loss: 311.698029  [48640/99840], accuracy 91.76% [44630/48640]
training loss: 305.495728  [51200/99840], accuracy 91.77% [46988/51200]
training loss: 309.093170  [53760/99840], accuracy 91.78% [49343/53760]
training loss: 308.939056  [56320/99840], accuracy 91.81% [51706/56320]
training loss: 308.524353  [58880/99840], accuracy 91.82% [54063/58880]
training loss: 306.165344  [61440/99840], accuracy 91.82% [56415/61440]
training loss: 314.952148  [64000/99840], accuracy 91.81% [58759/64000]
training loss: 304.037842  [66560/99840], accuracy 91.82% [61113/66560]
training loss: 308.028931  [69120/99840], accuracy 91.82% [63467/69120]
training loss: 303.952759  [71680/99840], accuracy 91.80% [65804/71680]
training loss: 314.496826  [74240/99840], accuracy 91.77% [68133/74240]
training loss: 307.271973  [76800/99840], accuracy 91.77% [70476/76800]
training loss: 310.484131  [79360/99840], accuracy 91.75% [72816/79360]
training loss: 308.135254  [81920/99840], accuracy 91.76% [75166/81920]
training loss: 310.138214  [84480/99840], accuracy 91.75% [77508/84480]
training loss: 310.955170  [87040/99840], accuracy 91.73% [79842/87040]
training loss: 307.461609  [89600/99840], accuracy 91.73% [82189/89600]
training loss: 308.984985  [92160/99840], accuracy 91.73% [84537/92160]
training loss: 314.200256  [94720/99840], accuracy 91.72% [86877/94720]
training loss: 299.844666  [97280/99840], accuracy 91.74% [89240/97280]
training loss: 306.187469  [99840/99840], accuracy 91.75% [91607/99840]
training avg loss: 2.410906  [99840/99840]
training accuracy: 91.75% [91607/99840]
validation avg loss: 2.421454
validation accuracy: 90.41% [22566/24960]

saving model

Epoch 19
training loss: 304.000458  [ 2560/99840], accuracy 92.30% [ 2363/ 2560]
training loss: 306.944580  [ 5120/99840], accuracy 92.19% [ 4720/ 5120]
training loss: 304.595917  [ 7680/99840], accuracy 92.01% [ 7066/ 7680]
training loss: 314.830902  [10240/99840], accuracy 91.90% [ 9411/10240]
training loss: 310.640839  [12800/99840], accuracy 91.99% [11775/12800]
training loss: 305.698730  [15360/99840], accuracy 92.15% [14154/15360]
training loss: 312.327850  [17920/99840], accuracy 92.11% [16507/17920]
training loss: 310.882050  [20480/99840], accuracy 92.11% [18864/20480]
training loss: 307.697113  [23040/99840], accuracy 92.12% [21225/23040]
training loss: 307.192566  [25600/99840], accuracy 92.13% [23585/25600]
training loss: 317.047455  [28160/99840], accuracy 92.06% [25924/28160]
training loss: 308.906616  [30720/99840], accuracy 92.03% [28272/30720]
training loss: 308.235840  [33280/99840], accuracy 91.97% [30609/33280]
training loss: 304.979401  [35840/99840], accuracy 91.98% [32967/35840]
training loss: 307.262268  [38400/99840], accuracy 91.97% [35315/38400]
training loss: 306.308777  [40960/99840], accuracy 92.00% [37684/40960]
training loss: 307.067871  [43520/99840], accuracy 92.01% [40042/43520]
training loss: 306.559937  [46080/99840], accuracy 91.97% [42378/46080]
training loss: 310.520752  [48640/99840], accuracy 91.92% [44712/48640]
training loss: 308.070099  [51200/99840], accuracy 91.94% [47074/51200]
training loss: 305.524048  [53760/99840], accuracy 91.95% [49432/53760]
training loss: 311.269867  [56320/99840], accuracy 91.94% [51782/56320]
training loss: 302.006226  [58880/99840], accuracy 91.95% [54139/58880]
training loss: 311.487213  [61440/99840], accuracy 91.94% [56487/61440]
training loss: 307.267975  [64000/99840], accuracy 91.95% [58846/64000]
training loss: 316.126129  [66560/99840], accuracy 91.93% [61190/66560]
training loss: 311.848145  [69120/99840], accuracy 91.91% [63525/69120]
training loss: 313.549500  [71680/99840], accuracy 91.88% [65862/71680]
training loss: 308.388306  [74240/99840], accuracy 91.87% [68206/74240]
training loss: 309.890381  [76800/99840], accuracy 91.87% [70559/76800]
training loss: 303.936951  [79360/99840], accuracy 91.85% [72894/79360]
training loss: 308.601929  [81920/99840], accuracy 91.84% [75239/81920]
training loss: 308.610870  [84480/99840], accuracy 91.84% [77590/84480]
training loss: 306.202332  [87040/99840], accuracy 91.86% [79959/87040]
training loss: 315.423126  [89600/99840], accuracy 91.87% [82316/89600]
training loss: 310.021667  [92160/99840], accuracy 91.88% [84675/92160]
training loss: 306.682831  [94720/99840], accuracy 91.90% [87049/94720]
training loss: 306.990509  [97280/99840], accuracy 91.91% [89408/97280]
training loss: 311.179932  [99840/99840], accuracy 91.89% [91742/99840]
training avg loss: 2.409338  [99840/99840]
training accuracy: 91.89% [91742/99840]
validation avg loss: 2.419433
validation accuracy: 90.53% [22597/24960]

saving model

Epoch 20
training loss: 311.489319  [ 2560/99840], accuracy 92.19% [ 2360/ 2560]
training loss: 306.598663  [ 5120/99840], accuracy 92.34% [ 4728/ 5120]
training loss: 308.394348  [ 7680/99840], accuracy 92.08% [ 7072/ 7680]
training loss: 309.047760  [10240/99840], accuracy 92.10% [ 9431/10240]
training loss: 313.071777  [12800/99840], accuracy 92.01% [11777/12800]
training loss: 309.990021  [15360/99840], accuracy 91.89% [14114/15360]
training loss: 305.164886  [17920/99840], accuracy 91.82% [16454/17920]
training loss: 307.533508  [20480/99840], accuracy 91.88% [18818/20480]
training loss: 307.396210  [23040/99840], accuracy 91.96% [21188/23040]
training loss: 311.678650  [25600/99840], accuracy 91.94% [23536/25600]
training loss: 310.389160  [28160/99840], accuracy 91.93% [25888/28160]
training loss: 305.950684  [30720/99840], accuracy 92.01% [28266/30720]
training loss: 312.084381  [33280/99840], accuracy 92.04% [30630/33280]
training loss: 306.775024  [35840/99840], accuracy 91.99% [32970/35840]
training loss: 304.740662  [38400/99840], accuracy 91.98% [35320/38400]
training loss: 302.291016  [40960/99840], accuracy 92.06% [37708/40960]
training loss: 310.180603  [43520/99840], accuracy 92.06% [40065/43520]
training loss: 306.966248  [46080/99840], accuracy 92.07% [42428/46080]
training loss: 307.579437  [48640/99840], accuracy 92.11% [44803/48640]
training loss: 306.812958  [51200/99840], accuracy 92.06% [47136/51200]
training loss: 306.109009  [53760/99840], accuracy 92.05% [49487/53760]
training loss: 306.297241  [56320/99840], accuracy 92.03% [51829/56320]
training loss: 308.035645  [58880/99840], accuracy 92.06% [54202/58880]
training loss: 307.934418  [61440/99840], accuracy 92.08% [56571/61440]
training loss: 305.626282  [64000/99840], accuracy 92.01% [58886/64000]
training loss: 308.585297  [66560/99840], accuracy 92.02% [61246/66560]
training loss: 313.032166  [69120/99840], accuracy 92.00% [63593/69120]
training loss: 311.037933  [71680/99840], accuracy 92.00% [65943/71680]
training loss: 312.306183  [74240/99840], accuracy 92.02% [68315/74240]
training loss: 305.226044  [76800/99840], accuracy 91.99% [70651/76800]
training loss: 318.681854  [79360/99840], accuracy 91.97% [72988/79360]
training loss: 306.480804  [81920/99840], accuracy 91.98% [75352/81920]
training loss: 305.515381  [84480/99840], accuracy 91.98% [77703/84480]
training loss: 310.729218  [87040/99840], accuracy 92.00% [80074/87040]
training loss: 308.231293  [89600/99840], accuracy 92.00% [82436/89600]
training loss: 309.109955  [92160/99840], accuracy 91.99% [84775/92160]
training loss: 306.946899  [94720/99840], accuracy 92.01% [87153/94720]
training loss: 304.009552  [97280/99840], accuracy 92.01% [89505/97280]
training loss: 305.657776  [99840/99840], accuracy 92.01% [91858/99840]
training avg loss: 2.407991  [99840/99840]
training accuracy: 92.01% [91858/99840]
validation avg loss: 2.421627
validation accuracy: 90.42% [22569/24960]

saving model

Epoch 21
training loss: 314.231110  [ 2560/99840], accuracy 91.95% [ 2354/ 2560]
training loss: 307.006042  [ 5120/99840], accuracy 92.07% [ 4714/ 5120]
training loss: 310.757690  [ 7680/99840], accuracy 92.04% [ 7069/ 7680]
training loss: 306.907440  [10240/99840], accuracy 92.10% [ 9431/10240]
training loss: 305.658936  [12800/99840], accuracy 92.22% [11804/12800]
training loss: 307.246552  [15360/99840], accuracy 92.29% [14176/15360]
training loss: 309.744873  [17920/99840], accuracy 92.21% [16524/17920]
training loss: 308.829193  [20480/99840], accuracy 92.13% [18869/20480]
training loss: 313.664764  [23040/99840], accuracy 92.15% [21232/23040]
training loss: 305.520752  [25600/99840], accuracy 92.14% [23589/25600]
training loss: 310.031494  [28160/99840], accuracy 92.19% [25960/28160]
training loss: 306.135284  [30720/99840], accuracy 92.26% [28341/30720]
training loss: 309.320892  [33280/99840], accuracy 92.29% [30713/33280]
training loss: 312.895081  [35840/99840], accuracy 92.26% [33067/35840]
training loss: 309.616699  [38400/99840], accuracy 92.23% [35418/38400]
training loss: 306.175140  [40960/99840], accuracy 92.24% [37780/40960]
training loss: 304.699829  [43520/99840], accuracy 92.26% [40153/43520]
training loss: 307.955383  [46080/99840], accuracy 92.25% [42510/46080]
training loss: 306.507812  [48640/99840], accuracy 92.24% [44864/48640]
training loss: 310.548157  [51200/99840], accuracy 92.21% [47211/51200]
training loss: 311.575531  [53760/99840], accuracy 92.18% [49557/53760]
training loss: 307.174011  [56320/99840], accuracy 92.19% [51922/56320]
training loss: 308.782013  [58880/99840], accuracy 92.18% [54274/58880]
training loss: 307.861053  [61440/99840], accuracy 92.18% [56635/61440]
training loss: 312.642944  [64000/99840], accuracy 92.15% [58973/64000]
training loss: 307.002014  [66560/99840], accuracy 92.16% [61345/66560]
training loss: 305.592194  [69120/99840], accuracy 92.15% [63697/69120]
training loss: 307.530151  [71680/99840], accuracy 92.16% [66059/71680]
training loss: 306.630768  [74240/99840], accuracy 92.16% [68420/74240]
training loss: 312.355804  [76800/99840], accuracy 92.15% [70771/76800]
training loss: 319.072723  [79360/99840], accuracy 92.13% [73114/79360]
training loss: 308.243347  [81920/99840], accuracy 92.13% [75470/81920]
training loss: 307.515656  [84480/99840], accuracy 92.14% [77840/84480]
training loss: 306.053497  [87040/99840], accuracy 92.14% [80195/87040]
training loss: 308.718933  [89600/99840], accuracy 92.14% [82559/89600]
training loss: 310.395599  [92160/99840], accuracy 92.14% [84916/92160]
training loss: 308.015259  [94720/99840], accuracy 92.14% [87273/94720]
training loss: 310.624908  [97280/99840], accuracy 92.12% [89617/97280]
training loss: 305.400421  [99840/99840], accuracy 92.13% [91985/99840]
training avg loss: 2.406658  [99840/99840]
training accuracy: 92.13% [91985/99840]
validation avg loss: 2.418439
validation accuracy: 90.65% [22626/24960]

saving model

Epoch 22
training loss: 308.159882  [ 2560/99840], accuracy 92.30% [ 2363/ 2560]
training loss: 303.234711  [ 5120/99840], accuracy 92.79% [ 4751/ 5120]
training loss: 301.684143  [ 7680/99840], accuracy 92.57% [ 7109/ 7680]
training loss: 309.760651  [10240/99840], accuracy 92.57% [ 9479/10240]
training loss: 312.061310  [12800/99840], accuracy 92.52% [11842/12800]
training loss: 308.188049  [15360/99840], accuracy 92.54% [14214/15360]
training loss: 311.414246  [17920/99840], accuracy 92.41% [16560/17920]
training loss: 303.889587  [20480/99840], accuracy 92.39% [18921/20480]
training loss: 304.508118  [23040/99840], accuracy 92.49% [21310/23040]
training loss: 307.923920  [25600/99840], accuracy 92.46% [23671/25600]
training loss: 308.276733  [28160/99840], accuracy 92.40% [26020/28160]
training loss: 306.870178  [30720/99840], accuracy 92.41% [28389/30720]
training loss: 310.421387  [33280/99840], accuracy 92.43% [30761/33280]
training loss: 305.917786  [35840/99840], accuracy 92.40% [33117/35840]
training loss: 308.875183  [38400/99840], accuracy 92.38% [35475/38400]
training loss: 308.684662  [40960/99840], accuracy 92.35% [37827/40960]
training loss: 307.260956  [43520/99840], accuracy 92.39% [40209/43520]
training loss: 305.185852  [46080/99840], accuracy 92.41% [42581/46080]
training loss: 311.041229  [48640/99840], accuracy 92.42% [44952/48640]
training loss: 311.304138  [51200/99840], accuracy 92.38% [47300/51200]
training loss: 307.868866  [53760/99840], accuracy 92.41% [49680/53760]
training loss: 304.114197  [56320/99840], accuracy 92.41% [52044/56320]
training loss: 307.259491  [58880/99840], accuracy 92.38% [54392/58880]
training loss: 308.648651  [61440/99840], accuracy 92.35% [56742/61440]
training loss: 307.387451  [64000/99840], accuracy 92.36% [59108/64000]
training loss: 305.433472  [66560/99840], accuracy 92.33% [61456/66560]
training loss: 307.106201  [69120/99840], accuracy 92.30% [63800/69120]
training loss: 305.006714  [71680/99840], accuracy 92.32% [66173/71680]
training loss: 301.711487  [74240/99840], accuracy 92.33% [68544/74240]
training loss: 314.000092  [76800/99840], accuracy 92.31% [70895/76800]
training loss: 305.244019  [79360/99840], accuracy 92.30% [73249/79360]
training loss: 305.470795  [81920/99840], accuracy 92.33% [75637/81920]
training loss: 305.990662  [84480/99840], accuracy 92.30% [77979/84480]
training loss: 307.944336  [87040/99840], accuracy 92.29% [80325/87040]
training loss: 305.440613  [89600/99840], accuracy 92.29% [82691/89600]
training loss: 309.351135  [92160/99840], accuracy 92.32% [85079/92160]
training loss: 306.920074  [94720/99840], accuracy 92.31% [87439/94720]
training loss: 306.352203  [97280/99840], accuracy 92.32% [89805/97280]
training loss: 307.670715  [99840/99840], accuracy 92.31% [92161/99840]
training avg loss: 2.404530  [99840/99840]
training accuracy: 92.31% [92161/99840]
validation avg loss: 2.418130
validation accuracy: 90.62% [22620/24960]

saving model

Epoch 23
training loss: 313.117065  [ 2560/99840], accuracy 92.03% [ 2356/ 2560]
training loss: 305.500427  [ 5120/99840], accuracy 92.01% [ 4711/ 5120]
training loss: 307.371582  [ 7680/99840], accuracy 92.11% [ 7074/ 7680]
training loss: 305.503143  [10240/99840], accuracy 92.44% [ 9466/10240]
training loss: 309.363831  [12800/99840], accuracy 92.34% [11820/12800]
training loss: 307.395142  [15360/99840], accuracy 92.14% [14152/15360]
training loss: 303.356995  [17920/99840], accuracy 92.18% [16519/17920]
training loss: 306.893158  [20480/99840], accuracy 92.26% [18894/20480]
training loss: 305.645996  [23040/99840], accuracy 92.34% [21275/23040]
training loss: 306.765045  [25600/99840], accuracy 92.34% [23640/25600]
training loss: 310.463531  [28160/99840], accuracy 92.30% [25992/28160]
training loss: 308.398773  [30720/99840], accuracy 92.34% [28368/30720]
training loss: 305.994232  [33280/99840], accuracy 92.32% [30725/33280]
training loss: 308.721313  [35840/99840], accuracy 92.34% [33094/35840]
training loss: 313.286987  [38400/99840], accuracy 92.37% [35471/38400]
training loss: 308.645416  [40960/99840], accuracy 92.40% [37847/40960]
training loss: 313.050659  [43520/99840], accuracy 92.41% [40218/43520]
training loss: 307.096100  [46080/99840], accuracy 92.40% [42580/46080]
training loss: 304.804199  [48640/99840], accuracy 92.42% [44953/48640]
training loss: 311.099579  [51200/99840], accuracy 92.38% [47300/51200]
training loss: 308.231506  [53760/99840], accuracy 92.41% [49682/53760]
training loss: 305.606812  [56320/99840], accuracy 92.43% [52057/56320]
training loss: 307.475159  [58880/99840], accuracy 92.46% [54442/58880]
training loss: 308.513367  [61440/99840], accuracy 92.45% [56801/61440]
training loss: 310.357300  [64000/99840], accuracy 92.44% [59163/64000]
training loss: 313.248077  [66560/99840], accuracy 92.42% [61517/66560]
training loss: 305.525421  [69120/99840], accuracy 92.46% [63910/69120]
training loss: 310.199890  [71680/99840], accuracy 92.45% [66270/71680]
training loss: 306.708008  [74240/99840], accuracy 92.45% [68635/74240]
training loss: 302.853912  [76800/99840], accuracy 92.44% [70992/76800]
training loss: 306.694336  [79360/99840], accuracy 92.44% [73364/79360]
training loss: 301.192261  [81920/99840], accuracy 92.47% [75755/81920]
training loss: 308.862030  [84480/99840], accuracy 92.48% [78127/84480]
training loss: 305.521606  [87040/99840], accuracy 92.47% [80486/87040]
training loss: 310.433716  [89600/99840], accuracy 92.50% [82876/89600]
training loss: 307.620056  [92160/99840], accuracy 92.48% [85233/92160]
training loss: 306.701385  [94720/99840], accuracy 92.48% [87596/94720]
training loss: 308.317810  [97280/99840], accuracy 92.48% [89962/97280]
training loss: 313.034546  [99840/99840], accuracy 92.48% [92332/99840]
training avg loss: 2.402632  [99840/99840]
training accuracy: 92.48% [92332/99840]
validation avg loss: 2.417358
validation accuracy: 90.69% [22637/24960]

saving model

Epoch 24
training loss: 311.935760  [ 2560/99840], accuracy 91.72% [ 2348/ 2560]
training loss: 305.840485  [ 5120/99840], accuracy 91.52% [ 4686/ 5120]
training loss: 306.604187  [ 7680/99840], accuracy 91.97% [ 7063/ 7680]
training loss: 305.786896  [10240/99840], accuracy 92.10% [ 9431/10240]
training loss: 311.326111  [12800/99840], accuracy 92.14% [11794/12800]
training loss: 302.550507  [15360/99840], accuracy 92.17% [14157/15360]
training loss: 307.493134  [17920/99840], accuracy 92.25% [16532/17920]
training loss: 306.960999  [20480/99840], accuracy 92.29% [18902/20480]
training loss: 307.894012  [23040/99840], accuracy 92.44% [21299/23040]
training loss: 308.404480  [25600/99840], accuracy 92.40% [23654/25600]
training loss: 305.485992  [28160/99840], accuracy 92.38% [26013/28160]
training loss: 305.645111  [30720/99840], accuracy 92.46% [28404/30720]
training loss: 311.086975  [33280/99840], accuracy 92.51% [30788/33280]
training loss: 304.892517  [35840/99840], accuracy 92.61% [33190/35840]
training loss: 307.903320  [38400/99840], accuracy 92.60% [35559/38400]
training loss: 307.495422  [40960/99840], accuracy 92.60% [37929/40960]
training loss: 309.533234  [43520/99840], accuracy 92.56% [40282/43520]
training loss: 311.230011  [46080/99840], accuracy 92.52% [42634/46080]
training loss: 306.289948  [48640/99840], accuracy 92.52% [45003/48640]
training loss: 310.874817  [51200/99840], accuracy 92.53% [47377/51200]
training loss: 304.471588  [53760/99840], accuracy 92.58% [49772/53760]
training loss: 308.479248  [56320/99840], accuracy 92.62% [52165/56320]
training loss: 303.620422  [58880/99840], accuracy 92.62% [54537/58880]
training loss: 308.895508  [61440/99840], accuracy 92.65% [56926/61440]
training loss: 308.341583  [64000/99840], accuracy 92.61% [59273/64000]
training loss: 304.583038  [66560/99840], accuracy 92.65% [61667/66560]
training loss: 306.982666  [69120/99840], accuracy 92.65% [64042/69120]
training loss: 306.258545  [71680/99840], accuracy 92.60% [66376/71680]
training loss: 307.604248  [74240/99840], accuracy 92.57% [68723/74240]
training loss: 306.592773  [76800/99840], accuracy 92.55% [71082/76800]
training loss: 306.822784  [79360/99840], accuracy 92.54% [73436/79360]
training loss: 308.915192  [81920/99840], accuracy 92.53% [75801/81920]
training loss: 306.708191  [84480/99840], accuracy 92.54% [78182/84480]
training loss: 309.757874  [87040/99840], accuracy 92.55% [80556/87040]
training loss: 306.454773  [89600/99840], accuracy 92.55% [82922/89600]
training loss: 309.625336  [92160/99840], accuracy 92.55% [85291/92160]
training loss: 305.602997  [94720/99840], accuracy 92.54% [87653/94720]
training loss: 310.442413  [97280/99840], accuracy 92.51% [89993/97280]
training loss: 308.771271  [99840/99840], accuracy 92.51% [92364/99840]
training avg loss: 2.402084  [99840/99840]
training accuracy: 92.51% [92364/99840]
validation avg loss: 2.416771
validation accuracy: 90.85% [22675/24960]

saving model

Epoch 25
training loss: 308.667297  [ 2560/99840], accuracy 91.37% [ 2339/ 2560]
training loss: 306.275269  [ 5120/99840], accuracy 92.19% [ 4720/ 5120]
training loss: 305.467621  [ 7680/99840], accuracy 92.27% [ 7086/ 7680]
training loss: 305.752319  [10240/99840], accuracy 92.29% [ 9451/10240]
training loss: 306.680084  [12800/99840], accuracy 92.28% [11812/12800]
training loss: 306.488220  [15360/99840], accuracy 92.42% [14196/15360]
training loss: 306.578857  [17920/99840], accuracy 92.47% [16570/17920]
training loss: 308.893250  [20480/99840], accuracy 92.55% [18955/20480]
training loss: 307.929260  [23040/99840], accuracy 92.57% [21328/23040]
training loss: 304.485229  [25600/99840], accuracy 92.57% [23697/25600]
training loss: 305.515381  [28160/99840], accuracy 92.52% [26055/28160]
training loss: 306.804779  [30720/99840], accuracy 92.60% [28447/30720]
training loss: 303.844971  [33280/99840], accuracy 92.65% [30835/33280]
training loss: 307.514893  [35840/99840], accuracy 92.62% [33194/35840]
training loss: 307.897186  [38400/99840], accuracy 92.62% [35565/38400]
training loss: 312.933044  [40960/99840], accuracy 92.60% [37927/40960]
training loss: 304.796417  [43520/99840], accuracy 92.59% [40297/43520]
training loss: 301.950073  [46080/99840], accuracy 92.59% [42665/46080]
training loss: 302.457886  [48640/99840], accuracy 92.60% [45043/48640]
training loss: 306.559998  [51200/99840], accuracy 92.61% [47415/51200]
training loss: 304.157379  [53760/99840], accuracy 92.61% [49785/53760]
training loss: 303.745636  [56320/99840], accuracy 92.62% [52164/56320]
training loss: 309.324066  [58880/99840], accuracy 92.62% [54537/58880]
training loss: 305.361847  [61440/99840], accuracy 92.63% [56913/61440]
training loss: 311.008789  [64000/99840], accuracy 92.66% [59302/64000]
training loss: 305.590698  [66560/99840], accuracy 92.64% [61663/66560]
training loss: 303.069916  [69120/99840], accuracy 92.64% [64035/69120]
training loss: 304.036407  [71680/99840], accuracy 92.65% [66408/71680]
training loss: 310.314209  [74240/99840], accuracy 92.63% [68770/74240]
training loss: 307.706604  [76800/99840], accuracy 92.65% [71153/76800]
training loss: 306.777924  [79360/99840], accuracy 92.65% [73528/79360]
training loss: 310.795349  [81920/99840], accuracy 92.68% [75921/81920]
training loss: 309.499939  [84480/99840], accuracy 92.66% [78280/84480]
training loss: 307.435364  [87040/99840], accuracy 92.66% [80652/87040]
training loss: 304.163208  [89600/99840], accuracy 92.66% [83022/89600]
training loss: 303.918243  [92160/99840], accuracy 92.64% [85381/92160]
training loss: 311.083160  [94720/99840], accuracy 92.62% [87730/94720]
training loss: 312.003204  [97280/99840], accuracy 92.62% [90098/97280]
training loss: 307.399353  [99840/99840], accuracy 92.60% [92455/99840]
training avg loss: 2.400819  [99840/99840]
training accuracy: 92.60% [92455/99840]
validation avg loss: 2.417000
validation accuracy: 90.78% [22658/24960]

saving model

Epoch 26
training loss: 304.593506  [ 2560/99840], accuracy 93.36% [ 2390/ 2560]
training loss: 302.927734  [ 5120/99840], accuracy 92.87% [ 4755/ 5120]
training loss: 307.517639  [ 7680/99840], accuracy 92.89% [ 7134/ 7680]
training loss: 304.760498  [10240/99840], accuracy 93.08% [ 9531/10240]
training loss: 307.144623  [12800/99840], accuracy 93.28% [11940/12800]
training loss: 308.636078  [15360/99840], accuracy 93.24% [14321/15360]
training loss: 307.731750  [17920/99840], accuracy 93.12% [16687/17920]
training loss: 307.505096  [20480/99840], accuracy 93.15% [19078/20480]
training loss: 307.681580  [23040/99840], accuracy 93.10% [21451/23040]
training loss: 305.826141  [25600/99840], accuracy 93.02% [23814/25600]
training loss: 310.222473  [28160/99840], accuracy 93.01% [26191/28160]
training loss: 305.402008  [30720/99840], accuracy 93.01% [28572/30720]
training loss: 307.002167  [33280/99840], accuracy 92.99% [30946/33280]
training loss: 304.763794  [35840/99840], accuracy 92.97% [33320/35840]
training loss: 309.830414  [38400/99840], accuracy 92.91% [35679/38400]
training loss: 303.470001  [40960/99840], accuracy 92.93% [38064/40960]
training loss: 303.265686  [43520/99840], accuracy 92.95% [40451/43520]
training loss: 307.970917  [46080/99840], accuracy 92.92% [42818/46080]
training loss: 310.478485  [48640/99840], accuracy 92.90% [45187/48640]
training loss: 311.890656  [51200/99840], accuracy 92.86% [47545/51200]
training loss: 304.501953  [53760/99840], accuracy 92.81% [49896/53760]
training loss: 300.791321  [56320/99840], accuracy 92.82% [52275/56320]
training loss: 307.009644  [58880/99840], accuracy 92.81% [54649/58880]
training loss: 309.033966  [61440/99840], accuracy 92.82% [57026/61440]
training loss: 305.105469  [64000/99840], accuracy 92.80% [59394/64000]
training loss: 312.088898  [66560/99840], accuracy 92.79% [61764/66560]
training loss: 309.036224  [69120/99840], accuracy 92.80% [64145/69120]
training loss: 310.438202  [71680/99840], accuracy 92.77% [66497/71680]
training loss: 310.961548  [74240/99840], accuracy 92.78% [68877/74240]
training loss: 307.682068  [76800/99840], accuracy 92.77% [71251/76800]
training loss: 307.377228  [79360/99840], accuracy 92.77% [73624/79360]
training loss: 308.038666  [81920/99840], accuracy 92.76% [75988/81920]
training loss: 309.484833  [84480/99840], accuracy 92.77% [78376/84480]
training loss: 305.877075  [87040/99840], accuracy 92.78% [80752/87040]
training loss: 306.318176  [89600/99840], accuracy 92.76% [83117/89600]
training loss: 307.677948  [92160/99840], accuracy 92.76% [85491/92160]
training loss: 304.367462  [94720/99840], accuracy 92.78% [87880/94720]
training loss: 305.042450  [97280/99840], accuracy 92.78% [90260/97280]
training loss: 307.609406  [99840/99840], accuracy 92.80% [92650/99840]
training avg loss: 2.398748  [99840/99840]
training accuracy: 92.80% [92650/99840]
validation avg loss: 2.417396
validation accuracy: 90.71% [22642/24960]

saving model

Epoch 27
training loss: 308.942474  [ 2560/99840], accuracy 93.36% [ 2390/ 2560]
training loss: 305.842590  [ 5120/99840], accuracy 92.99% [ 4761/ 5120]
training loss: 308.493103  [ 7680/99840], accuracy 92.88% [ 7133/ 7680]
training loss: 312.214417  [10240/99840], accuracy 92.89% [ 9512/10240]
training loss: 312.172150  [12800/99840], accuracy 92.84% [11883/12800]
training loss: 303.057526  [15360/99840], accuracy 92.85% [14261/15360]
training loss: 308.682861  [17920/99840], accuracy 92.93% [16653/17920]
training loss: 307.428711  [20480/99840], accuracy 92.96% [19038/20480]
training loss: 305.822449  [23040/99840], accuracy 92.97% [21421/23040]
training loss: 311.134155  [25600/99840], accuracy 92.95% [23796/25600]
training loss: 307.139618  [28160/99840], accuracy 93.00% [26189/28160]
training loss: 306.900909  [30720/99840], accuracy 92.91% [28541/30720]
training loss: 304.777161  [33280/99840], accuracy 92.98% [30945/33280]
training loss: 308.242065  [35840/99840], accuracy 92.99% [33328/35840]
training loss: 306.720276  [38400/99840], accuracy 92.92% [35683/38400]
training loss: 307.198608  [40960/99840], accuracy 92.93% [38065/40960]
training loss: 309.857178  [43520/99840], accuracy 92.88% [40420/43520]
training loss: 308.268829  [46080/99840], accuracy 92.91% [42811/46080]
training loss: 303.975708  [48640/99840], accuracy 92.91% [45192/48640]
training loss: 310.300568  [51200/99840], accuracy 92.88% [47555/51200]
training loss: 310.384735  [53760/99840], accuracy 92.90% [49941/53760]
training loss: 310.874451  [56320/99840], accuracy 92.91% [52327/56320]
training loss: 302.560699  [58880/99840], accuracy 92.89% [54694/58880]
training loss: 306.273071  [61440/99840], accuracy 92.87% [57059/61440]
training loss: 305.160217  [64000/99840], accuracy 92.87% [59436/64000]
training loss: 308.725311  [66560/99840], accuracy 92.84% [61796/66560]
training loss: 304.532440  [69120/99840], accuracy 92.84% [64171/69120]
training loss: 307.608215  [71680/99840], accuracy 92.82% [66534/71680]
training loss: 303.733307  [74240/99840], accuracy 92.85% [68929/74240]
training loss: 306.638275  [76800/99840], accuracy 92.88% [71335/76800]
training loss: 307.795746  [79360/99840], accuracy 92.88% [73710/79360]
training loss: 307.018066  [81920/99840], accuracy 92.87% [76076/81920]
training loss: 308.518341  [84480/99840], accuracy 92.85% [78442/84480]
training loss: 307.442719  [87040/99840], accuracy 92.84% [80811/87040]
training loss: 306.159698  [89600/99840], accuracy 92.84% [83186/89600]
training loss: 308.404968  [92160/99840], accuracy 92.83% [85554/92160]
training loss: 307.702026  [94720/99840], accuracy 92.82% [87923/94720]
training loss: 306.730316  [97280/99840], accuracy 92.81% [90284/97280]
training loss: 308.295624  [99840/99840], accuracy 92.82% [92667/99840]
training avg loss: 2.398750  [99840/99840]
training accuracy: 92.82% [92667/99840]
validation avg loss: 2.417132
validation accuracy: 90.73% [22646/24960]

saving model

Epoch 28
training loss: 312.329010  [ 2560/99840], accuracy 93.36% [ 2390/ 2560]
training loss: 307.717621  [ 5120/99840], accuracy 92.93% [ 4758/ 5120]
training loss: 308.210480  [ 7680/99840], accuracy 92.71% [ 7120/ 7680]
training loss: 304.567566  [10240/99840], accuracy 92.70% [ 9492/10240]
training loss: 306.906525  [12800/99840], accuracy 92.76% [11873/12800]
training loss: 308.154480  [15360/99840], accuracy 92.79% [14253/15360]
training loss: 310.354126  [17920/99840], accuracy 92.81% [16632/17920]
training loss: 310.861237  [20480/99840], accuracy 92.75% [18995/20480]
training loss: 301.245026  [23040/99840], accuracy 92.83% [21389/23040]
training loss: 316.022888  [25600/99840], accuracy 92.71% [23733/25600]
training loss: 304.246826  [28160/99840], accuracy 92.65% [26089/28160]
training loss: 305.946136  [30720/99840], accuracy 92.73% [28487/30720]
training loss: 304.971405  [33280/99840], accuracy 92.79% [30880/33280]
training loss: 308.456329  [35840/99840], accuracy 92.87% [33283/35840]
training loss: 307.170105  [38400/99840], accuracy 92.84% [35650/38400]
training loss: 311.226532  [40960/99840], accuracy 92.85% [38033/40960]
training loss: 305.773987  [43520/99840], accuracy 92.84% [40402/43520]
training loss: 315.187927  [46080/99840], accuracy 92.84% [42779/46080]
training loss: 310.527466  [48640/99840], accuracy 92.80% [45139/48640]
training loss: 301.891968  [51200/99840], accuracy 92.79% [47511/51200]
training loss: 315.748413  [53760/99840], accuracy 92.77% [49873/53760]
training loss: 309.121033  [56320/99840], accuracy 92.80% [52267/56320]
training loss: 307.522705  [58880/99840], accuracy 92.79% [54634/58880]
training loss: 307.828033  [61440/99840], accuracy 92.81% [57021/61440]
training loss: 307.974304  [64000/99840], accuracy 92.80% [59389/64000]
training loss: 307.020233  [66560/99840], accuracy 92.76% [61744/66560]
training loss: 305.973267  [69120/99840], accuracy 92.79% [64137/69120]
training loss: 305.452240  [71680/99840], accuracy 92.83% [66539/71680]
training loss: 304.454010  [74240/99840], accuracy 92.83% [68920/74240]
training loss: 308.674347  [76800/99840], accuracy 92.82% [71289/76800]
training loss: 306.494202  [79360/99840], accuracy 92.82% [73665/79360]
training loss: 307.998474  [81920/99840], accuracy 92.86% [76069/81920]
training loss: 308.155029  [84480/99840], accuracy 92.86% [78448/84480]
training loss: 304.447449  [87040/99840], accuracy 92.88% [80841/87040]
training loss: 307.801208  [89600/99840], accuracy 92.86% [83202/89600]
training loss: 308.030396  [92160/99840], accuracy 92.87% [85592/92160]
training loss: 306.802521  [94720/99840], accuracy 92.86% [87960/94720]
training loss: 314.154755  [97280/99840], accuracy 92.85% [90322/97280]
training loss: 314.336517  [99840/99840], accuracy 92.83% [92679/99840]
training avg loss: 2.398089  [99840/99840]
training accuracy: 92.83% [92679/99840]
validation avg loss: 2.416496
validation accuracy: 90.85% [22677/24960]

saving model

Epoch 29
training loss: 300.715698  [ 2560/99840], accuracy 93.01% [ 2381/ 2560]
training loss: 307.125275  [ 5120/99840], accuracy 93.50% [ 4787/ 5120]
training loss: 307.482788  [ 7680/99840], accuracy 93.74% [ 7199/ 7680]
training loss: 301.119537  [10240/99840], accuracy 93.50% [ 9574/10240]
training loss: 306.718231  [12800/99840], accuracy 93.12% [11919/12800]
training loss: 307.917236  [15360/99840], accuracy 93.05% [14293/15360]
training loss: 310.506195  [17920/99840], accuracy 92.94% [16654/17920]
training loss: 304.932861  [20480/99840], accuracy 92.93% [19032/20480]
training loss: 311.362823  [23040/99840], accuracy 92.95% [21415/23040]
training loss: 307.699677  [25600/99840], accuracy 92.88% [23777/25600]
training loss: 306.776764  [28160/99840], accuracy 92.90% [26161/28160]
training loss: 306.215820  [30720/99840], accuracy 92.92% [28545/30720]
training loss: 309.263763  [33280/99840], accuracy 92.86% [30905/33280]
training loss: 308.823029  [35840/99840], accuracy 92.87% [33286/35840]
training loss: 308.403778  [38400/99840], accuracy 92.90% [35673/38400]
training loss: 303.990417  [40960/99840], accuracy 92.92% [38060/40960]
training loss: 310.122589  [43520/99840], accuracy 92.87% [40419/43520]
training loss: 306.120453  [46080/99840], accuracy 92.87% [42793/46080]
training loss: 307.816071  [48640/99840], accuracy 92.88% [45177/48640]
training loss: 311.039673  [51200/99840], accuracy 92.88% [47556/51200]
training loss: 304.958862  [53760/99840], accuracy 92.89% [49937/53760]
training loss: 309.796448  [56320/99840], accuracy 92.91% [52328/56320]
training loss: 306.751831  [58880/99840], accuracy 92.90% [54701/58880]
training loss: 306.724121  [61440/99840], accuracy 92.92% [57093/61440]
training loss: 307.742523  [64000/99840], accuracy 92.91% [59462/64000]
training loss: 309.228241  [66560/99840], accuracy 92.89% [61826/66560]
training loss: 306.285675  [69120/99840], accuracy 92.89% [64203/69120]
training loss: 305.952118  [71680/99840], accuracy 92.88% [66576/71680]
training loss: 306.305939  [74240/99840], accuracy 92.88% [68957/74240]
training loss: 306.340302  [76800/99840], accuracy 92.89% [71343/76800]
training loss: 303.556946  [79360/99840], accuracy 92.89% [73718/79360]
training loss: 306.656921  [81920/99840], accuracy 92.89% [76099/81920]
training loss: 305.605835  [84480/99840], accuracy 92.91% [78493/84480]
training loss: 305.415100  [87040/99840], accuracy 92.92% [80878/87040]
training loss: 303.482666  [89600/99840], accuracy 92.94% [83271/89600]
training loss: 303.991974  [92160/99840], accuracy 92.95% [85663/92160]
training loss: 306.741272  [94720/99840], accuracy 92.95% [88039/94720]
training loss: 306.017029  [97280/99840], accuracy 92.98% [90447/97280]
training loss: 307.743317  [99840/99840], accuracy 92.98% [92832/99840]
training avg loss: 2.396647  [99840/99840]
training accuracy: 92.98% [92832/99840]
validation avg loss: 2.416500
validation accuracy: 90.81% [22666/24960]

saving model

No description has been provided for this image

**** Running model on the testing dataset ****
Test total loss: 50263.87488126755
Test avg loss: 2.416532446214786
Test accuracy: 90.81% [18888/20800]
No description has been provided for this image
No description has been provided for this image

You can see above that this model ends with ~93% accuracy on the test set and ~91% accuracy on the validation set. From the examples above, it performs decently well on a lot of different examples. The training/validation loss curves are pretty close to aligned. It gets 90% on test accuracy and performs decently well over all the characters. There is likely some room for improvement with the model, but overall it seems to generalize well. You can see below that on the handwritten examples it predicts all characters correctly except for 1 character on each. For example in the "fresh beginning" image below it predicts a 'w' instead of a 'n'. in On the font that looks more like handwriting it correctly predicts 177/183 characters, which is still pretty good performance overall. On the other typed fonts it performs similar to the pretrained model but slightly worse, so not very well. Probably the best way to improve performance on other fonts would be to have typed characters in the dataset. I believe the dataset is mainly handwritten characters so that would definitely improve performance on those. Overall, this model performs similar to the pretrained model, but slightly worse. For example, the pretrained model gets all the handwritten examples correct while this model misses 1 character on each of them.

In [27]:
out = image_transcription(test_images[0], test_labels[0], test_labels_spaces[0], TEST_PATH, test_filenames[0], model)
Actual label:                   BESURETODRINKYOUROVALTINE
Predicted label without spaces: BESURETODRINKYOUROYALTINE
Accuracy: (24/25)


Actual label:                   BE SURE TO DRINK YOUR OVALTINE
Predicted label with spaces:    BE SURE TO DRINK YOUR OYALTINE
Accuracy: (29/30)

No description has been provided for this image
No description has been provided for this image
In [28]:
out = image_transcription(test_images[1], test_labels[1], test_labels_spaces[1], TEST_PATH, test_filenames[1], model)

  
Actual label:                   GOUTES
Predicted label without spaces: GOUTEG
Accuracy: (5/6)


Actual label:                   GO UTES
Predicted label with spaces:    GO UTEG
Accuracy: (6/7)

No description has been provided for this image
No description has been provided for this image
In [29]:
out = image_transcription(test_images[2], test_labels[2], test_labels_spaces[2], TEST_PATH, test_filenames[2], model)
Actual label:                   DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION
Predicted label without spaces: DREAMBIGFORDREAMSIGNITEPOSSLBILLTYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHLNGSREMEMBERTHATTHEJOURNEYLSASLMPORTANTASTHEDESTINATLON
Accuracy: (177/183)


Actual label:                   DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION
Predicted label with spaces:    DREAM BIG FOR DREAMS IGNITE POSSLBILLTY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THLNGS REMEMBER THAT THE JOURNEY LS AS LMPORTANT AS THE DESTINATLON
Accuracy: (208/214)

No description has been provided for this image
No description has been provided for this image
In [30]:
out = image_transcription(test_images[3], test_labels[3], test_labels_spaces[3], TEST_PATH, test_filenames[3], model)
Actual label:                   EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH
Predicted label without spaces: EVERYMOMENTISAFRESHBEGIWNINGANEWSTARTANEWPATH
Accuracy: (44/45)


Actual label:                   EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH
Predicted label with spaces:    EVERY MOMENT IS A FRESH BEGIWNING A NEW START A NEW PATH
Accuracy: (55/56)

No description has been provided for this image
No description has been provided for this image
In [31]:
out = image_transcription(test_images[4], test_labels[4], test_labels_spaces[4], TEST_PATH, test_filenames[4], model)
Actual label:                   LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH
Predicted label without spaces: LOWCARBOHXDRPBIJTAJBTSHAVBBBCYTOMJFLNCRBASJNGLYPOPUKAKSUPPORFBRSRCLAJMTRHKTYAKBXOJTABKXMORBFFFBCFIVBFHANCJRTFHTFKDJTFPSFORWBJGHPTCJSSAXDPROVLDKOFRHERHBALFHBBNFTLJRSSUTIIJJLCHASLIOMTFKBIJCJONPRBSSUKBANDJMPROVBDCYHOJJBSTBROLJTTBVJFIJSAHOWBVBLTSAOWFBDOTCJTOKSBBBJBVTKUTJFSTJITJDIBFSYCARRTJPOLBNPIALLONGTNBKMHTAIJBHRJSKSARBVITKVLOEPHBAVAJIJABLJKRBYSHBAKCHLIUBRAFUKBJXDLCYATRYBSPHARKOWCARBOHXURAFBDJFIRYTSARJFHJGMIYBFFBCTLVBFORSTIOKFPBRMWTTIJGHKBOSSBLJJTFHAJPHTTLKJIOVRRLGFBRMBEFJFCUIVTRNFSSJSNOIRSLGNLFJCANFKYYJJTGRBAYBKTHANOTHBRJCOMMONULBRFPBAXYSRHBLRLONCRFTYKMTKJJEFPBCTSONTCBIOJJJFSTBROLLIVBLSANUBJTOONPKBSSUREKTABUNKNOWXKBSJFARCHLLLBKAFURESLTGCTETJSHPSLSOMBPOFRBNFLAKFORNBTGAJLVBHBAIJTHOUFCOMBSASYHSOCDLAFBUWJTRHINCRBASEDJROXSUMPULONOKSATLJRAFJFDFAPFHLSCYONCJJUSLONPOJNBSLFOTYHBJMPORFAXCIFOTTFOLJLOVVLNCABALAXCBDMODYKRAIBDLEFAPPROPKJAUBEOKFHTKJNJJLVJDLTJJJABASWJFLBASLPHFINETRDEORFUKFRHBKKJFSLJFARCH
Accuracy: (44/765)


Actual label:                   LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH
Predicted label with spaces:    LO W C ARBO HXDR PB I JT A J BTS H AVB BBCYTO M JF LNC RBASJNGLY POPUKAK SUPPORFBRSR CLAJM TRHK TY AKB X OJTABKX M ORB FFFBCFIVB FH AN CJR T FH TFK DJTFPS FOR W BJG HP TCJSS AX D PR OVLDK O FR HER HBALF H BBNFTLJRS SUT I I J J L C H AS LIO M TFK BIJCJO N PRBSSU KB AN D JM PR OVBD CYH OJJBSTBROL J TTBV JFIJSA H O W BVBLT SA OWFB D O TC JTOKS BBBJBV TK UTJFS T JITJ DIBFS YC ARR TJ POLBNPIAL LO NG T NBK M HT AIJBH RJSKS ARB VITK VL OE PHB AVAJIJABLJK RB YSH BAKC H LIUBRAFU KB JX DLCYATRYBS PH AR KO W C ARBO HXURAFB DJFIR Y T S AR JF HJG MIY BFFBCTLVB FOR STIO KF PBR M WTTIJG HK BOSS BLJJTFH AJ PH TTLK JIO V RR L G FBR M BEF JFCUIVTRNFSS JS N OIRSLG NLFJC ANFKY Y J J T G RBAYBK TH AN OTHBR JC O M M O N ULBRF PBAX YS RHBLR LO NC RFTYK M T K J J EFPBCTS O N TCBIOJJJFSTBR OL LIVBLS AN U BJTO O N PKBSSU RE K T A B U NK N O W X KBS JF ARC H LLLBKAFU RE SLTGCTETJ SH PSL SO MB PO FR BNFLAK FO R NB TG AJLVB HBAIJTH OUFC O MBS AS Y H SOCDLAFBU WJTRH INC RBASED JR O XSU MPULO N OK SATLJRAF JF D FAP FHLS CYO NCJJUSLO N P OJNBSL FO TYHB JMPORFAXC IF OTT FOLJLO VV LNC A BALAXCBD M O D YKRAIB DLEF APPR OPKJAUB EO K FH TK JNJJLVJDLT J J J AB AS W JFLB ASL PHFI NE TR D EOR FU KFR HBK K JFSL JF ARC H
Accuracy: (88/895)

No description has been provided for this image
No description has been provided for this image
In [32]:
out = image_transcription(test_images[5], test_labels[5], test_labels_spaces[5], TEST_PATH, test_filenames[5], model)
Actual label:                   YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED
Predicted label without spaces: XOUWIIIEACBMANXDBEBAPSINIIEBBUFNBVBRIBTXOURSBIEBBDBEBAFBD
Accuracy: (29/57)


Actual label:                   YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED
Predicted label with spaces:    XOU WIII EACB MANX DBEBAPS IN IIEB BUF NBVBR IBT XOURSBIE BB DBEBAFBD
Accuracy: (41/69)

No description has been provided for this image
No description has been provided for this image
In [33]:
out = image_transcription(test_images[6], test_labels[6], test_labels_spaces[6], TEST_PATH, test_filenames[6], model)
Actual label:                   ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS
Predicted label without spaces: ABSFRACJAUDIOPAFLBRNRBCOGNIIIONISANIMPORWAXPRBSPRCHLOPICINUHBMAYJACHINBLKARNIXGARBAANDINCIDUDBSSEVBRAKLAYSKSSUCHASAUDIOLAYGGINGACOUSFTCSCYJBNBCLASSIFICAWIONANDSOUXDBVLJFNFDKBCJIONRBCBXLLXNBURALNBRPWORKSHAVEBBBNAPPLIBDLOSOLVBAUDIOPAFFJFRNRFCORGNJIIONPROBLMPRYJBSHOWBVJFRJFVIOUSSYSIBMSFOCUSONSMAHLDAXASTJFFSWHICHKJMIRISIHBPBREORMANCHBOFAUDIOPAFFBRNRBCOGNIIIOXSXSLIBMS
Accuracy: (51/345)


Actual label:                   ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS
Predicted label with spaces:    ABSFRACJ AUDIO PAFLBRN RBCOGNIIION IS AN IMPORWAXP RBSP RCH LOPIC IN UHB MA Y JA C HINB LKARNIXG ARBA AND INCIDUDBS SEVBRAK LAYSKS SUCH AS AUDIO LA YGGING ACOUSFTC SC Y JBNB CLASSIFICAWION AND SOUXD BV L JFNF DK BCJION RBCBXLLX NBURAL NBRPW ORKS HAVE BBBN APPLIBD LO SOLVB AUDIO PAFFJFRN RFCO RGNJIION PROBL M PR Y J B S HOWBVJFR JFVIOUS SYSIBMS FOCUS ON SMAHL DAXAS T JFFS W HICH KJMIRIS IHB PBREORMANCHB OF AUDIO PAFFBRN RBCOGNIIIOX SXSLIBMS
Accuracy: (206/401)

No description has been provided for this image
No description has been provided for this image

Model 2¶

This model has different hyperparameters. I used a slightly higher learning rate and weight decay. I also used a slightly lower momentum.

In depth discussion about model results are after the cell below.

In [34]:
learningRate = 1.5e-3  # Set this value between 1e-2 to 1e-4
weightDecay = 1.5e-3  # Set this value between 1e-2 to 1e-4
momentum = 0.85 # Adding momentum to potentially improve training using SGD
epochs = 30

model = CustomCharacterPredictor()
optimizer = torch.optim.SGD(model.parameters(), lr=learningRate, weight_decay=weightDecay, momentum=momentum)
res = trainingLoop(model, optimizer, epochs, dataloader_train, dataloader_val, dataloader_test)
**** Starting run_1701991247 ****
Epoch 0
training loss: 416.857635  [ 2560/99840], accuracy 2.93% [   75/ 2560]
training loss: 417.506714  [ 5120/99840], accuracy 3.46% [  177/ 5120]
training loss: 415.357849  [ 7680/99840], accuracy 3.97% [  305/ 7680]
training loss: 415.842743  [10240/99840], accuracy 4.37% [  447/10240]
training loss: 414.634918  [12800/99840], accuracy 4.88% [  624/12800]
training loss: 414.922302  [15360/99840], accuracy 5.35% [  821/15360]
training loss: 414.839386  [17920/99840], accuracy 5.79% [ 1037/17920]
training loss: 412.392273  [20480/99840], accuracy 6.22% [ 1274/20480]
training loss: 412.465302  [23040/99840], accuracy 6.73% [ 1550/23040]
training loss: 413.403290  [25600/99840], accuracy 7.24% [ 1853/25600]
training loss: 409.933960  [28160/99840], accuracy 7.84% [ 2207/28160]
training loss: 411.430176  [30720/99840], accuracy 8.28% [ 2544/30720]
training loss: 409.756836  [33280/99840], accuracy 8.73% [ 2906/33280]
training loss: 407.538361  [35840/99840], accuracy 9.30% [ 3334/35840]
training loss: 408.187775  [38400/99840], accuracy 9.89% [ 3799/38400]
training loss: 399.967896  [40960/99840], accuracy 10.52% [ 4309/40960]
training loss: 398.259003  [43520/99840], accuracy 11.16% [ 4857/43520]
training loss: 401.357971  [46080/99840], accuracy 11.80% [ 5437/46080]
training loss: 398.476349  [48640/99840], accuracy 12.49% [ 6075/48640]
training loss: 397.481506  [51200/99840], accuracy 13.13% [ 6723/51200]
training loss: 393.583038  [53760/99840], accuracy 13.70% [ 7364/53760]
training loss: 392.513275  [56320/99840], accuracy 14.37% [ 8094/56320]
training loss: 395.405121  [58880/99840], accuracy 14.99% [ 8829/58880]
training loss: 393.396362  [61440/99840], accuracy 15.61% [ 9593/61440]
training loss: 390.662689  [64000/99840], accuracy 16.21% [10373/64000]
training loss: 383.716705  [66560/99840], accuracy 16.84% [11209/66560]
training loss: 387.946136  [69120/99840], accuracy 17.41% [12036/69120]
training loss: 389.628479  [71680/99840], accuracy 17.97% [12879/71680]
training loss: 386.048462  [74240/99840], accuracy 18.52% [13748/74240]
training loss: 382.990723  [76800/99840], accuracy 19.05% [14634/76800]
training loss: 392.478882  [79360/99840], accuracy 19.56% [15519/79360]
training loss: 387.108398  [81920/99840], accuracy 20.09% [16458/81920]
training loss: 390.063965  [84480/99840], accuracy 20.58% [17386/84480]
training loss: 378.776733  [87040/99840], accuracy 21.05% [18322/87040]
training loss: 373.585632  [89600/99840], accuracy 21.53% [19292/89600]
training loss: 380.462982  [92160/99840], accuracy 22.00% [20277/92160]
training loss: 380.409180  [94720/99840], accuracy 22.46% [21276/94720]
training loss: 379.123901  [97280/99840], accuracy 22.97% [22342/97280]
training loss: 389.645996  [99840/99840], accuracy 23.40% [23366/99840]
training avg loss: 3.110998  [99840/99840]
training accuracy: 23.40% [23366/99840]
validation avg loss: 2.919173
validation accuracy: 43.71% [10911/24960]

saving model

Epoch 1
training loss: 383.017365  [ 2560/99840], accuracy 44.45% [ 1138/ 2560]
training loss: 366.658661  [ 5120/99840], accuracy 43.57% [ 2231/ 5120]
training loss: 366.400116  [ 7680/99840], accuracy 43.75% [ 3360/ 7680]
training loss: 371.738312  [10240/99840], accuracy 43.72% [ 4477/10240]
training loss: 372.971893  [12800/99840], accuracy 44.21% [ 5659/12800]
training loss: 369.632874  [15360/99840], accuracy 44.31% [ 6806/15360]
training loss: 370.968567  [17920/99840], accuracy 44.52% [ 7978/17920]
training loss: 373.515045  [20480/99840], accuracy 44.70% [ 9154/20480]
training loss: 371.097290  [23040/99840], accuracy 44.97% [10360/23040]
training loss: 364.727173  [25600/99840], accuracy 45.08% [11541/25600]
training loss: 366.772339  [28160/99840], accuracy 45.28% [12752/28160]
training loss: 369.132080  [30720/99840], accuracy 45.52% [13983/30720]
training loss: 362.398163  [33280/99840], accuracy 45.80% [15243/33280]
training loss: 361.773132  [35840/99840], accuracy 46.11% [16526/35840]
training loss: 367.484253  [38400/99840], accuracy 46.35% [17797/38400]
training loss: 367.168793  [40960/99840], accuracy 46.52% [19054/40960]
training loss: 363.728790  [43520/99840], accuracy 46.69% [20318/43520]
training loss: 361.019409  [46080/99840], accuracy 46.89% [21606/46080]
training loss: 369.098022  [48640/99840], accuracy 47.00% [22861/48640]
training loss: 358.261230  [51200/99840], accuracy 47.24% [24188/51200]
training loss: 361.667419  [53760/99840], accuracy 47.52% [25548/53760]
training loss: 362.756653  [56320/99840], accuracy 47.66% [26844/56320]
training loss: 361.976044  [58880/99840], accuracy 47.94% [28227/58880]
training loss: 356.193878  [61440/99840], accuracy 48.32% [29685/61440]
training loss: 352.840729  [64000/99840], accuracy 48.57% [31083/64000]
training loss: 361.535614  [66560/99840], accuracy 48.78% [32470/66560]
training loss: 355.435516  [69120/99840], accuracy 48.99% [33863/69120]
training loss: 358.952850  [71680/99840], accuracy 49.21% [35275/71680]
training loss: 353.952179  [74240/99840], accuracy 49.47% [36727/74240]
training loss: 355.298309  [76800/99840], accuracy 49.72% [38182/76800]
training loss: 366.536407  [79360/99840], accuracy 49.92% [39620/79360]
training loss: 362.854401  [81920/99840], accuracy 50.13% [41069/81920]
training loss: 351.669830  [84480/99840], accuracy 50.34% [42528/84480]
training loss: 358.613556  [87040/99840], accuracy 50.58% [44028/87040]
training loss: 346.069336  [89600/99840], accuracy 50.82% [45535/89600]
training loss: 355.915405  [92160/99840], accuracy 51.03% [47027/92160]
training loss: 354.252686  [94720/99840], accuracy 51.25% [48542/94720]
training loss: 356.235229  [97280/99840], accuracy 51.42% [50023/97280]
training loss: 365.423645  [99840/99840], accuracy 51.59% [51511/99840]
training avg loss: 2.836646  [99840/99840]
training accuracy: 51.59% [51511/99840]
validation avg loss: 2.738381
validation accuracy: 60.40% [15077/24960]

saving model

Epoch 2
training loss: 355.171631  [ 2560/99840], accuracy 58.01% [ 1485/ 2560]
training loss: 358.097992  [ 5120/99840], accuracy 59.55% [ 3049/ 5120]
training loss: 356.901825  [ 7680/99840], accuracy 59.27% [ 4552/ 7680]
training loss: 358.257355  [10240/99840], accuracy 59.03% [ 6045/10240]
training loss: 358.601288  [12800/99840], accuracy 59.22% [ 7580/12800]
training loss: 350.190979  [15360/99840], accuracy 59.26% [ 9103/15360]
training loss: 354.026733  [17920/99840], accuracy 59.41% [10646/17920]
training loss: 344.825134  [20480/99840], accuracy 59.70% [12226/20480]
training loss: 360.863495  [23040/99840], accuracy 59.69% [13753/23040]
training loss: 350.042877  [25600/99840], accuracy 59.80% [15308/25600]
training loss: 356.104584  [28160/99840], accuracy 59.96% [16886/28160]
training loss: 343.593292  [30720/99840], accuracy 60.16% [18480/30720]
training loss: 337.856842  [33280/99840], accuracy 60.27% [20057/33280]
training loss: 346.126251  [35840/99840], accuracy 60.33% [21622/35840]
training loss: 351.780914  [38400/99840], accuracy 60.46% [23215/38400]
training loss: 347.846680  [40960/99840], accuracy 60.53% [24794/40960]
training loss: 339.933350  [43520/99840], accuracy 60.80% [26458/43520]
training loss: 348.921051  [46080/99840], accuracy 60.95% [28088/46080]
training loss: 342.405090  [48640/99840], accuracy 61.23% [29782/48640]
training loss: 345.564728  [51200/99840], accuracy 61.41% [31444/51200]
training loss: 347.080139  [53760/99840], accuracy 61.59% [33113/53760]
training loss: 342.876068  [56320/99840], accuracy 61.77% [34791/56320]
training loss: 346.740845  [58880/99840], accuracy 61.91% [36452/58880]
training loss: 346.246582  [61440/99840], accuracy 62.05% [38124/61440]
training loss: 345.696808  [64000/99840], accuracy 62.15% [39779/64000]
training loss: 340.658661  [66560/99840], accuracy 62.26% [41440/66560]
training loss: 341.659668  [69120/99840], accuracy 62.43% [43150/69120]
training loss: 341.748230  [71680/99840], accuracy 62.49% [44795/71680]
training loss: 347.957855  [74240/99840], accuracy 62.61% [46482/74240]
training loss: 340.891022  [76800/99840], accuracy 62.73% [48175/76800]
training loss: 344.009735  [79360/99840], accuracy 62.84% [49870/79360]
training loss: 349.040131  [81920/99840], accuracy 62.99% [51602/81920]
training loss: 350.471100  [84480/99840], accuracy 63.10% [53306/84480]
training loss: 343.528931  [87040/99840], accuracy 63.20% [55013/87040]
training loss: 346.401245  [89600/99840], accuracy 63.31% [56728/89600]
training loss: 339.622711  [92160/99840], accuracy 63.41% [58442/92160]
training loss: 350.691437  [94720/99840], accuracy 63.50% [60144/94720]
training loss: 345.105835  [97280/99840], accuracy 63.57% [61838/97280]
training loss: 342.376160  [99840/99840], accuracy 63.70% [63603/99840]
training avg loss: 2.712416  [99840/99840]
training accuracy: 63.70% [63603/99840]
validation avg loss: 2.656332
validation accuracy: 67.88% [16942/24960]

saving model

Epoch 3
training loss: 337.752197  [ 2560/99840], accuracy 66.02% [ 1690/ 2560]
training loss: 344.197113  [ 5120/99840], accuracy 66.91% [ 3426/ 5120]
training loss: 338.238831  [ 7680/99840], accuracy 67.06% [ 5150/ 7680]
training loss: 334.930298  [10240/99840], accuracy 67.25% [ 6886/10240]
training loss: 346.286499  [12800/99840], accuracy 67.59% [ 8652/12800]
training loss: 336.210938  [15360/99840], accuracy 67.55% [10376/15360]
training loss: 339.199188  [17920/99840], accuracy 67.52% [12099/17920]
training loss: 337.018799  [20480/99840], accuracy 67.54% [13833/20480]
training loss: 342.990723  [23040/99840], accuracy 67.61% [15578/23040]
training loss: 336.298187  [25600/99840], accuracy 67.63% [17313/25600]
training loss: 339.040894  [28160/99840], accuracy 67.67% [19057/28160]
training loss: 339.124847  [30720/99840], accuracy 67.69% [20795/30720]
training loss: 346.922729  [33280/99840], accuracy 67.81% [22566/33280]
training loss: 336.948853  [35840/99840], accuracy 67.95% [24353/35840]
training loss: 336.066101  [38400/99840], accuracy 68.00% [26111/38400]
training loss: 348.166351  [40960/99840], accuracy 68.02% [27859/40960]
training loss: 338.700500  [43520/99840], accuracy 68.25% [29703/43520]
training loss: 336.242798  [46080/99840], accuracy 68.34% [31492/46080]
training loss: 333.806000  [48640/99840], accuracy 68.56% [33346/48640]
training loss: 340.140991  [51200/99840], accuracy 68.69% [35171/51200]
training loss: 336.506165  [53760/99840], accuracy 68.90% [37038/53760]
training loss: 334.988953  [56320/99840], accuracy 69.02% [38874/56320]
training loss: 331.292969  [58880/99840], accuracy 69.15% [40715/58880]
training loss: 338.501282  [61440/99840], accuracy 69.32% [42593/61440]
training loss: 332.266846  [64000/99840], accuracy 69.46% [44453/64000]
training loss: 334.821381  [66560/99840], accuracy 69.63% [46343/66560]
training loss: 331.117889  [69120/99840], accuracy 69.78% [48231/69120]
training loss: 332.619904  [71680/99840], accuracy 69.89% [50099/71680]
training loss: 335.767761  [74240/99840], accuracy 70.07% [52020/74240]
training loss: 332.681244  [76800/99840], accuracy 70.22% [53929/76800]
training loss: 335.107086  [79360/99840], accuracy 70.35% [55827/79360]
training loss: 337.428314  [81920/99840], accuracy 70.45% [57716/81920]
training loss: 338.737183  [84480/99840], accuracy 70.59% [59636/84480]
training loss: 333.028900  [87040/99840], accuracy 70.68% [61517/87040]
training loss: 335.943665  [89600/99840], accuracy 70.81% [63448/89600]
training loss: 331.736603  [92160/99840], accuracy 70.93% [65370/92160]
training loss: 328.078125  [94720/99840], accuracy 71.09% [67340/94720]
training loss: 322.732086  [97280/99840], accuracy 71.16% [69221/97280]
training loss: 328.941559  [99840/99840], accuracy 71.29% [71172/99840]
training avg loss: 2.633701  [99840/99840]
training accuracy: 71.29% [71172/99840]
validation avg loss: 2.578785
validation accuracy: 76.02% [18974/24960]

saving model

Epoch 4
training loss: 337.376465  [ 2560/99840], accuracy 74.73% [ 1913/ 2560]
training loss: 331.191528  [ 5120/99840], accuracy 75.25% [ 3853/ 5120]
training loss: 331.368347  [ 7680/99840], accuracy 75.23% [ 5778/ 7680]
training loss: 330.710480  [10240/99840], accuracy 75.35% [ 7716/10240]
training loss: 332.191345  [12800/99840], accuracy 75.64% [ 9682/12800]
training loss: 330.996460  [15360/99840], accuracy 75.77% [11638/15360]
training loss: 329.550903  [17920/99840], accuracy 75.74% [13573/17920]
training loss: 329.468414  [20480/99840], accuracy 75.60% [15483/20480]
training loss: 332.847412  [23040/99840], accuracy 75.63% [17425/23040]
training loss: 334.611664  [25600/99840], accuracy 75.57% [19345/25600]
training loss: 330.613525  [28160/99840], accuracy 75.57% [21281/28160]
training loss: 324.532562  [30720/99840], accuracy 75.67% [23246/30720]
training loss: 329.346741  [33280/99840], accuracy 75.61% [25162/33280]
training loss: 332.027344  [35840/99840], accuracy 75.65% [27113/35840]
training loss: 325.809357  [38400/99840], accuracy 75.69% [29064/38400]
training loss: 325.844727  [40960/99840], accuracy 75.75% [31027/40960]
training loss: 333.003571  [43520/99840], accuracy 75.86% [33015/43520]
training loss: 329.983612  [46080/99840], accuracy 75.93% [34987/46080]
training loss: 333.935364  [48640/99840], accuracy 75.98% [36959/48640]
training loss: 325.641388  [51200/99840], accuracy 76.03% [38928/51200]
training loss: 327.715881  [53760/99840], accuracy 76.11% [40918/53760]
training loss: 328.577423  [56320/99840], accuracy 76.16% [42891/56320]
training loss: 329.469666  [58880/99840], accuracy 76.25% [44894/58880]
training loss: 329.979980  [61440/99840], accuracy 76.27% [46861/61440]
training loss: 328.710632  [64000/99840], accuracy 76.29% [48827/64000]
training loss: 327.383026  [66560/99840], accuracy 76.34% [50811/66560]
training loss: 328.601776  [69120/99840], accuracy 76.35% [52771/69120]
training loss: 333.321381  [71680/99840], accuracy 76.31% [54702/71680]
training loss: 333.683960  [74240/99840], accuracy 76.34% [56676/74240]
training loss: 322.859436  [76800/99840], accuracy 76.42% [58687/76800]
training loss: 333.760742  [79360/99840], accuracy 76.41% [60642/79360]
training loss: 329.388245  [81920/99840], accuracy 76.47% [62646/81920]
training loss: 328.537109  [84480/99840], accuracy 76.52% [64640/84480]
training loss: 332.132111  [87040/99840], accuracy 76.53% [66609/87040]
training loss: 330.156647  [89600/99840], accuracy 76.56% [68596/89600]
training loss: 335.765381  [92160/99840], accuracy 76.55% [70544/92160]
training loss: 323.208160  [94720/99840], accuracy 76.59% [72545/94720]
training loss: 326.227539  [97280/99840], accuracy 76.63% [74542/97280]
training loss: 328.022644  [99840/99840], accuracy 76.66% [76534/99840]
training avg loss: 2.577061  [99840/99840]
training accuracy: 76.66% [76534/99840]
validation avg loss: 2.555787
validation accuracy: 77.71% [19396/24960]

saving model

Epoch 5
training loss: 323.306946  [ 2560/99840], accuracy 77.19% [ 1976/ 2560]
training loss: 329.082245  [ 5120/99840], accuracy 77.30% [ 3958/ 5120]
training loss: 325.312500  [ 7680/99840], accuracy 77.43% [ 5947/ 7680]
training loss: 328.240356  [10240/99840], accuracy 77.52% [ 7938/10240]
training loss: 324.036407  [12800/99840], accuracy 77.79% [ 9957/12800]
training loss: 323.027435  [15360/99840], accuracy 77.96% [11974/15360]
training loss: 322.942963  [17920/99840], accuracy 77.89% [13958/17920]
training loss: 333.715942  [20480/99840], accuracy 77.73% [15920/20480]
training loss: 330.914093  [23040/99840], accuracy 77.72% [17906/23040]
training loss: 331.381836  [25600/99840], accuracy 77.59% [19862/25600]
training loss: 324.354218  [28160/99840], accuracy 77.59% [21848/28160]
training loss: 322.353363  [30720/99840], accuracy 77.68% [23862/30720]
training loss: 327.239380  [33280/99840], accuracy 77.70% [25858/33280]
training loss: 330.894501  [35840/99840], accuracy 77.66% [27834/35840]
training loss: 331.416779  [38400/99840], accuracy 77.74% [29852/38400]
training loss: 320.205811  [40960/99840], accuracy 77.70% [31826/40960]
training loss: 331.997253  [43520/99840], accuracy 77.73% [33830/43520]
training loss: 323.646118  [46080/99840], accuracy 77.69% [35798/46080]
training loss: 330.254089  [48640/99840], accuracy 77.78% [37834/48640]
training loss: 326.398529  [51200/99840], accuracy 77.85% [39859/51200]
training loss: 329.949707  [53760/99840], accuracy 77.87% [41863/53760]
training loss: 326.477325  [56320/99840], accuracy 77.82% [43831/56320]
training loss: 324.542938  [58880/99840], accuracy 77.88% [45858/58880]
training loss: 329.277771  [61440/99840], accuracy 77.89% [47855/61440]
training loss: 325.885529  [64000/99840], accuracy 77.86% [49832/64000]
training loss: 326.328247  [66560/99840], accuracy 77.92% [51865/66560]
training loss: 320.828247  [69120/99840], accuracy 77.92% [53860/69120]
training loss: 320.321228  [71680/99840], accuracy 77.97% [55890/71680]
training loss: 327.275574  [74240/99840], accuracy 78.00% [57909/74240]
training loss: 325.623840  [76800/99840], accuracy 77.98% [59892/76800]
training loss: 327.403778  [79360/99840], accuracy 77.97% [61877/79360]
training loss: 324.082275  [81920/99840], accuracy 78.02% [63916/81920]
training loss: 328.439697  [84480/99840], accuracy 78.01% [65903/84480]
training loss: 335.847839  [87040/99840], accuracy 78.03% [67920/87040]
training loss: 326.408875  [89600/99840], accuracy 78.05% [69930/89600]
training loss: 330.739441  [92160/99840], accuracy 78.08% [71960/92160]
training loss: 322.168030  [94720/99840], accuracy 78.08% [73953/94720]
training loss: 330.296997  [97280/99840], accuracy 78.06% [75935/97280]
training loss: 319.489716  [99840/99840], accuracy 78.09% [77966/99840]
training avg loss: 2.556610  [99840/99840]
training accuracy: 78.09% [77966/99840]
validation avg loss: 2.545959
validation accuracy: 78.45% [19581/24960]

saving model

Epoch 6
training loss: 320.441589  [ 2560/99840], accuracy 78.20% [ 2002/ 2560]
training loss: 322.840332  [ 5120/99840], accuracy 78.22% [ 4005/ 5120]
training loss: 330.297394  [ 7680/99840], accuracy 78.27% [ 6011/ 7680]
training loss: 323.927979  [10240/99840], accuracy 78.65% [ 8054/10240]
training loss: 324.966949  [12800/99840], accuracy 78.84% [10092/12800]
training loss: 331.906708  [15360/99840], accuracy 78.67% [12084/15360]
training loss: 326.333801  [17920/99840], accuracy 78.54% [14075/17920]
training loss: 326.496033  [20480/99840], accuracy 78.53% [16083/20480]
training loss: 329.398041  [23040/99840], accuracy 78.53% [18093/23040]
training loss: 334.430847  [25600/99840], accuracy 78.58% [20117/25600]
training loss: 326.420319  [28160/99840], accuracy 78.68% [22157/28160]
training loss: 329.597534  [30720/99840], accuracy 78.62% [24152/30720]
training loss: 322.526459  [33280/99840], accuracy 78.62% [26165/33280]
training loss: 333.705261  [35840/99840], accuracy 78.67% [28196/35840]
training loss: 323.146240  [38400/99840], accuracy 78.71% [30223/38400]
training loss: 319.156952  [40960/99840], accuracy 78.74% [32252/40960]
training loss: 323.977783  [43520/99840], accuracy 78.78% [34285/43520]
training loss: 329.496613  [46080/99840], accuracy 78.85% [36332/46080]
training loss: 323.828827  [48640/99840], accuracy 78.85% [38354/48640]
training loss: 328.518921  [51200/99840], accuracy 78.80% [40346/51200]
training loss: 321.765350  [53760/99840], accuracy 78.76% [42341/53760]
training loss: 325.582062  [56320/99840], accuracy 78.80% [44382/56320]
training loss: 330.013092  [58880/99840], accuracy 78.82% [46412/58880]
training loss: 324.010071  [61440/99840], accuracy 78.81% [48418/61440]
training loss: 333.661743  [64000/99840], accuracy 78.85% [50461/64000]
training loss: 321.473511  [66560/99840], accuracy 78.86% [52486/66560]
training loss: 324.096252  [69120/99840], accuracy 78.85% [54498/69120]
training loss: 319.158051  [71680/99840], accuracy 78.82% [56500/71680]
training loss: 329.675201  [74240/99840], accuracy 78.85% [58539/74240]
training loss: 318.996979  [76800/99840], accuracy 78.88% [60576/76800]
training loss: 320.815399  [79360/99840], accuracy 78.91% [62622/79360]
training loss: 320.930878  [81920/99840], accuracy 78.90% [64637/81920]
training loss: 330.882477  [84480/99840], accuracy 78.92% [66671/84480]
training loss: 327.762939  [87040/99840], accuracy 78.95% [68714/87040]
training loss: 324.821411  [89600/99840], accuracy 78.94% [70733/89600]
training loss: 328.004028  [92160/99840], accuracy 78.92% [72729/92160]
training loss: 326.106720  [94720/99840], accuracy 78.92% [74753/94720]
training loss: 318.448242  [97280/99840], accuracy 78.92% [76772/97280]
training loss: 324.366638  [99840/99840], accuracy 78.92% [78790/99840]
training avg loss: 2.544684  [99840/99840]
training accuracy: 78.92% [78790/99840]
validation avg loss: 2.538291
validation accuracy: 78.94% [19703/24960]

saving model

Epoch 7
training loss: 326.820099  [ 2560/99840], accuracy 79.45% [ 2034/ 2560]
training loss: 323.326050  [ 5120/99840], accuracy 79.55% [ 4073/ 5120]
training loss: 327.571167  [ 7680/99840], accuracy 79.79% [ 6128/ 7680]
training loss: 328.084747  [10240/99840], accuracy 79.79% [ 8170/10240]
training loss: 330.054108  [12800/99840], accuracy 79.66% [10197/12800]
training loss: 319.400970  [15360/99840], accuracy 79.78% [12254/15360]
training loss: 324.341217  [17920/99840], accuracy 79.75% [14291/17920]
training loss: 321.276001  [20480/99840], accuracy 79.74% [16331/20480]
training loss: 325.619446  [23040/99840], accuracy 79.65% [18351/23040]
training loss: 319.396118  [25600/99840], accuracy 79.79% [20427/25600]
training loss: 332.070831  [28160/99840], accuracy 79.77% [22462/28160]
training loss: 319.707092  [30720/99840], accuracy 79.90% [24546/30720]
training loss: 317.926849  [33280/99840], accuracy 79.80% [26558/33280]
training loss: 323.903137  [35840/99840], accuracy 79.86% [28623/35840]
training loss: 317.239441  [38400/99840], accuracy 79.92% [30690/38400]
training loss: 325.120087  [40960/99840], accuracy 80.01% [32771/40960]
training loss: 325.741028  [43520/99840], accuracy 80.07% [34847/43520]
training loss: 317.487152  [46080/99840], accuracy 80.16% [36938/46080]
training loss: 328.413055  [48640/99840], accuracy 80.26% [39037/48640]
training loss: 324.886871  [51200/99840], accuracy 80.30% [41114/51200]
training loss: 320.624969  [53760/99840], accuracy 80.39% [43218/53760]
training loss: 322.622253  [56320/99840], accuracy 80.53% [45356/56320]
training loss: 320.373718  [58880/99840], accuracy 80.66% [47492/58880]
training loss: 329.249084  [61440/99840], accuracy 80.76% [49621/61440]
training loss: 318.139435  [64000/99840], accuracy 80.88% [51764/64000]
training loss: 326.558258  [66560/99840], accuracy 80.96% [53890/66560]
training loss: 316.923584  [69120/99840], accuracy 81.11% [56060/69120]
training loss: 315.745544  [71680/99840], accuracy 81.24% [58232/71680]
training loss: 326.885010  [74240/99840], accuracy 81.34% [60387/74240]
training loss: 320.377747  [76800/99840], accuracy 81.47% [62570/76800]
training loss: 326.093811  [79360/99840], accuracy 81.53% [64704/79360]
training loss: 320.623138  [81920/99840], accuracy 81.65% [66888/81920]
training loss: 326.193787  [84480/99840], accuracy 81.74% [69052/84480]
training loss: 319.183624  [87040/99840], accuracy 81.79% [71193/87040]
training loss: 318.594696  [89600/99840], accuracy 81.85% [73335/89600]
training loss: 326.110962  [92160/99840], accuracy 81.92% [75497/92160]
training loss: 317.672180  [94720/99840], accuracy 81.99% [77659/94720]
training loss: 321.316437  [97280/99840], accuracy 82.05% [79823/97280]
training loss: 314.995270  [99840/99840], accuracy 82.12% [81984/99840]
training avg loss: 2.517797  [99840/99840]
training accuracy: 82.12% [81984/99840]
validation avg loss: 2.483794
validation accuracy: 85.12% [21247/24960]

saving model

Epoch 8
training loss: 320.936554  [ 2560/99840], accuracy 85.51% [ 2189/ 2560]
training loss: 314.952606  [ 5120/99840], accuracy 85.64% [ 4385/ 5120]
training loss: 311.632416  [ 7680/99840], accuracy 85.47% [ 6564/ 7680]
training loss: 314.151733  [10240/99840], accuracy 85.56% [ 8761/10240]
training loss: 327.759186  [12800/99840], accuracy 85.55% [10951/12800]
training loss: 317.005005  [15360/99840], accuracy 85.54% [13139/15360]
training loss: 314.715851  [17920/99840], accuracy 85.66% [15351/17920]
training loss: 319.582428  [20480/99840], accuracy 85.51% [17512/20480]
training loss: 321.189697  [23040/99840], accuracy 85.50% [19699/23040]
training loss: 318.356964  [25600/99840], accuracy 85.55% [21900/25600]
training loss: 321.818909  [28160/99840], accuracy 85.55% [24090/28160]
training loss: 317.289795  [30720/99840], accuracy 85.60% [26295/30720]
training loss: 323.934174  [33280/99840], accuracy 85.49% [28452/33280]
training loss: 312.536072  [35840/99840], accuracy 85.53% [30655/35840]
training loss: 317.778259  [38400/99840], accuracy 85.57% [32859/38400]
training loss: 315.595337  [40960/99840], accuracy 85.52% [35028/40960]
training loss: 312.518280  [43520/99840], accuracy 85.62% [37260/43520]
training loss: 317.651703  [46080/99840], accuracy 85.58% [39433/46080]
training loss: 313.867615  [48640/99840], accuracy 85.53% [41603/48640]
training loss: 312.665619  [51200/99840], accuracy 85.62% [43836/51200]
training loss: 313.483673  [53760/99840], accuracy 85.63% [46037/53760]
training loss: 319.716766  [56320/99840], accuracy 85.64% [48230/56320]
training loss: 321.304810  [58880/99840], accuracy 85.60% [50403/58880]
training loss: 320.529785  [61440/99840], accuracy 85.66% [52628/61440]
training loss: 326.693390  [64000/99840], accuracy 85.65% [54817/64000]
training loss: 321.936584  [66560/99840], accuracy 85.68% [57029/66560]
training loss: 319.331421  [69120/99840], accuracy 85.69% [59229/69120]
training loss: 322.315460  [71680/99840], accuracy 85.72% [61441/71680]
training loss: 313.656647  [74240/99840], accuracy 85.74% [63652/74240]
training loss: 317.362152  [76800/99840], accuracy 85.74% [65845/76800]
training loss: 315.811279  [79360/99840], accuracy 85.74% [68044/79360]
training loss: 318.137970  [81920/99840], accuracy 85.76% [70253/81920]
training loss: 318.188568  [84480/99840], accuracy 85.77% [72457/84480]
training loss: 313.112427  [87040/99840], accuracy 85.80% [74681/87040]
training loss: 312.264740  [89600/99840], accuracy 85.81% [76885/89600]
training loss: 318.933472  [92160/99840], accuracy 85.86% [79124/92160]
training loss: 320.865112  [94720/99840], accuracy 85.89% [81351/94720]
training loss: 321.371094  [97280/99840], accuracy 85.86% [83526/97280]
training loss: 312.938843  [99840/99840], accuracy 85.86% [85726/99840]
training avg loss: 2.480539  [99840/99840]
training accuracy: 85.86% [85726/99840]
validation avg loss: 2.470244
validation accuracy: 86.11% [21494/24960]

saving model

Epoch 9
training loss: 317.168091  [ 2560/99840], accuracy 85.94% [ 2200/ 2560]
training loss: 313.543243  [ 5120/99840], accuracy 86.19% [ 4413/ 5120]
training loss: 317.326996  [ 7680/99840], accuracy 86.07% [ 6610/ 7680]
training loss: 313.113129  [10240/99840], accuracy 86.24% [ 8831/10240]
training loss: 308.981781  [12800/99840], accuracy 86.20% [11033/12800]
training loss: 318.074219  [15360/99840], accuracy 86.23% [13245/15360]
training loss: 312.836517  [17920/99840], accuracy 86.32% [15469/17920]
training loss: 321.419556  [20480/99840], accuracy 86.24% [17662/20480]
training loss: 314.154877  [23040/99840], accuracy 86.23% [19868/23040]
training loss: 316.932159  [25600/99840], accuracy 86.30% [22092/25600]
training loss: 314.119965  [28160/99840], accuracy 86.29% [24300/28160]
training loss: 316.803253  [30720/99840], accuracy 86.32% [26519/30720]
training loss: 316.907349  [33280/99840], accuracy 86.38% [28747/33280]
training loss: 315.977509  [35840/99840], accuracy 86.42% [30974/35840]
training loss: 316.093384  [38400/99840], accuracy 86.52% [33222/38400]
training loss: 324.273682  [40960/99840], accuracy 86.45% [35408/40960]
training loss: 320.790802  [43520/99840], accuracy 86.53% [37656/43520]
training loss: 312.019043  [46080/99840], accuracy 86.55% [39880/46080]
training loss: 317.684967  [48640/99840], accuracy 86.51% [42079/48640]
training loss: 313.547668  [51200/99840], accuracy 86.52% [44298/51200]
training loss: 311.017578  [53760/99840], accuracy 86.51% [46507/53760]
training loss: 315.774841  [56320/99840], accuracy 86.51% [48722/56320]
training loss: 318.457397  [58880/99840], accuracy 86.54% [50956/58880]
training loss: 312.799896  [61440/99840], accuracy 86.57% [53191/61440]
training loss: 318.497620  [64000/99840], accuracy 86.56% [55401/64000]
training loss: 315.308807  [66560/99840], accuracy 86.62% [57651/66560]
training loss: 313.949463  [69120/99840], accuracy 86.62% [59872/69120]
training loss: 321.082123  [71680/99840], accuracy 86.63% [62093/71680]
training loss: 316.818909  [74240/99840], accuracy 86.66% [64334/74240]
training loss: 319.396576  [76800/99840], accuracy 86.64% [66537/76800]
training loss: 319.448334  [79360/99840], accuracy 86.64% [68754/79360]
training loss: 317.985413  [81920/99840], accuracy 86.62% [70959/81920]
training loss: 315.742645  [84480/99840], accuracy 86.61% [73168/84480]
training loss: 318.623383  [87040/99840], accuracy 86.63% [75406/87040]
training loss: 313.332123  [89600/99840], accuracy 86.66% [77644/89600]
training loss: 316.935760  [92160/99840], accuracy 86.67% [79871/92160]
training loss: 310.601654  [94720/99840], accuracy 86.67% [82097/94720]
training loss: 309.520477  [97280/99840], accuracy 86.68% [84324/97280]
training loss: 315.188873  [99840/99840], accuracy 86.70% [86565/99840]
training avg loss: 2.468327  [99840/99840]
training accuracy: 86.70% [86565/99840]
validation avg loss: 2.463811
validation accuracy: 86.59% [21614/24960]

saving model

Epoch 10
training loss: 323.287506  [ 2560/99840], accuracy 86.84% [ 2223/ 2560]
training loss: 314.255127  [ 5120/99840], accuracy 87.34% [ 4472/ 5120]
training loss: 312.153534  [ 7680/99840], accuracy 87.36% [ 6709/ 7680]
training loss: 313.194000  [10240/99840], accuracy 87.55% [ 8965/10240]
training loss: 312.368225  [12800/99840], accuracy 87.47% [11196/12800]
training loss: 311.669220  [15360/99840], accuracy 87.44% [13431/15360]
training loss: 318.144806  [17920/99840], accuracy 87.48% [15677/17920]
training loss: 319.050629  [20480/99840], accuracy 87.47% [17914/20480]
training loss: 318.282684  [23040/99840], accuracy 87.43% [20145/23040]
training loss: 313.354736  [25600/99840], accuracy 87.35% [22361/25600]
training loss: 312.626892  [28160/99840], accuracy 87.44% [24622/28160]
training loss: 312.982025  [30720/99840], accuracy 87.36% [26838/30720]
training loss: 314.202179  [33280/99840], accuracy 87.39% [29085/33280]
training loss: 316.441956  [35840/99840], accuracy 87.41% [31328/35840]
training loss: 311.735596  [38400/99840], accuracy 87.44% [33577/38400]
training loss: 316.814575  [40960/99840], accuracy 87.37% [35788/40960]
training loss: 317.192261  [43520/99840], accuracy 87.31% [37998/43520]
training loss: 319.210236  [46080/99840], accuracy 87.30% [40226/46080]
training loss: 313.340363  [48640/99840], accuracy 87.30% [42462/48640]
training loss: 319.729340  [51200/99840], accuracy 87.31% [44703/51200]
training loss: 318.750549  [53760/99840], accuracy 87.25% [46907/53760]
training loss: 319.859833  [56320/99840], accuracy 87.24% [49133/56320]
training loss: 319.844421  [58880/99840], accuracy 87.25% [51371/58880]
training loss: 315.829681  [61440/99840], accuracy 87.23% [53596/61440]
training loss: 312.626984  [64000/99840], accuracy 87.22% [55818/64000]
training loss: 314.645874  [66560/99840], accuracy 87.20% [58041/66560]
training loss: 312.788788  [69120/99840], accuracy 87.20% [60276/69120]
training loss: 314.643036  [71680/99840], accuracy 87.19% [62499/71680]
training loss: 325.373932  [74240/99840], accuracy 87.19% [64728/74240]
training loss: 316.835327  [76800/99840], accuracy 87.19% [66962/76800]
training loss: 317.500000  [79360/99840], accuracy 87.19% [69191/79360]
training loss: 314.991089  [81920/99840], accuracy 87.19% [71424/81920]
training loss: 316.195953  [84480/99840], accuracy 87.23% [73695/84480]
training loss: 312.673920  [87040/99840], accuracy 87.24% [75933/87040]
training loss: 319.749115  [89600/99840], accuracy 87.23% [78161/89600]
training loss: 313.197021  [92160/99840], accuracy 87.22% [80380/92160]
training loss: 316.522522  [94720/99840], accuracy 87.22% [82612/94720]
training loss: 317.385986  [97280/99840], accuracy 87.23% [84857/97280]
training loss: 315.242371  [99840/99840], accuracy 87.21% [87068/99840]
training avg loss: 2.461763  [99840/99840]
training accuracy: 87.21% [87068/99840]
validation avg loss: 2.460575
validation accuracy: 86.78% [21660/24960]

saving model

Epoch 11
training loss: 309.750458  [ 2560/99840], accuracy 88.83% [ 2274/ 2560]
training loss: 310.912140  [ 5120/99840], accuracy 88.26% [ 4519/ 5120]
training loss: 313.745178  [ 7680/99840], accuracy 87.80% [ 6743/ 7680]
training loss: 311.115295  [10240/99840], accuracy 87.77% [ 8988/10240]
training loss: 319.003815  [12800/99840], accuracy 87.78% [11236/12800]
training loss: 308.298553  [15360/99840], accuracy 87.73% [13475/15360]
training loss: 317.236603  [17920/99840], accuracy 87.71% [15718/17920]
training loss: 313.503082  [20480/99840], accuracy 87.79% [17980/20480]
training loss: 311.572327  [23040/99840], accuracy 87.74% [20216/23040]
training loss: 314.503052  [25600/99840], accuracy 87.77% [22470/25600]
training loss: 316.264954  [28160/99840], accuracy 87.72% [24702/28160]
training loss: 311.689026  [30720/99840], accuracy 87.69% [26938/30720]
training loss: 320.186981  [33280/99840], accuracy 87.66% [29172/33280]
training loss: 311.769379  [35840/99840], accuracy 87.61% [31401/35840]
training loss: 320.233154  [38400/99840], accuracy 87.59% [33634/38400]
training loss: 319.671539  [40960/99840], accuracy 87.65% [35900/40960]
training loss: 315.718628  [43520/99840], accuracy 87.64% [38141/43520]
training loss: 313.576080  [46080/99840], accuracy 87.61% [40369/46080]
training loss: 319.238220  [48640/99840], accuracy 87.59% [42606/48640]
training loss: 314.970703  [51200/99840], accuracy 87.55% [44827/51200]
training loss: 308.507874  [53760/99840], accuracy 87.53% [47056/53760]
training loss: 319.511108  [56320/99840], accuracy 87.55% [49306/56320]
training loss: 318.703033  [58880/99840], accuracy 87.58% [51569/58880]
training loss: 314.883911  [61440/99840], accuracy 87.58% [53812/61440]
training loss: 314.746277  [64000/99840], accuracy 87.58% [56050/64000]
training loss: 316.304779  [66560/99840], accuracy 87.52% [58253/66560]
training loss: 315.089508  [69120/99840], accuracy 87.55% [60517/69120]
training loss: 311.971802  [71680/99840], accuracy 87.58% [62777/71680]
training loss: 312.319611  [74240/99840], accuracy 87.56% [65002/74240]
training loss: 310.682953  [76800/99840], accuracy 87.60% [67274/76800]
training loss: 311.471069  [79360/99840], accuracy 87.59% [69510/79360]
training loss: 312.476227  [81920/99840], accuracy 87.60% [71759/81920]
training loss: 310.842194  [84480/99840], accuracy 87.63% [74030/84480]
training loss: 317.787842  [87040/99840], accuracy 87.67% [76305/87040]
training loss: 311.700867  [89600/99840], accuracy 87.68% [78557/89600]
training loss: 313.675781  [92160/99840], accuracy 87.68% [80809/92160]
training loss: 317.977661  [94720/99840], accuracy 87.72% [83086/94720]
training loss: 312.581787  [97280/99840], accuracy 87.75% [85362/97280]
training loss: 312.462158  [99840/99840], accuracy 87.75% [87614/99840]
training avg loss: 2.455256  [99840/99840]
training accuracy: 87.75% [87614/99840]
validation avg loss: 2.452763
validation accuracy: 87.54% [21850/24960]

saving model

Epoch 12
training loss: 312.745178  [ 2560/99840], accuracy 87.77% [ 2247/ 2560]
training loss: 311.318420  [ 5120/99840], accuracy 87.97% [ 4504/ 5120]
training loss: 313.624054  [ 7680/99840], accuracy 88.07% [ 6764/ 7680]
training loss: 316.882538  [10240/99840], accuracy 88.12% [ 9023/10240]
training loss: 315.489166  [12800/99840], accuracy 88.14% [11282/12800]
training loss: 310.440155  [15360/99840], accuracy 88.21% [13549/15360]
training loss: 312.316528  [17920/99840], accuracy 88.17% [15800/17920]
training loss: 315.441681  [20480/99840], accuracy 88.31% [18085/20480]
training loss: 316.930054  [23040/99840], accuracy 88.36% [20359/23040]
training loss: 308.559509  [25600/99840], accuracy 88.41% [22633/25600]
training loss: 317.237396  [28160/99840], accuracy 88.41% [24896/28160]
training loss: 308.766418  [30720/99840], accuracy 88.40% [27158/30720]
training loss: 317.535980  [33280/99840], accuracy 88.43% [29429/33280]
training loss: 310.080811  [35840/99840], accuracy 88.38% [31674/35840]
training loss: 313.438812  [38400/99840], accuracy 88.47% [33972/38400]
training loss: 308.406250  [40960/99840], accuracy 88.54% [36266/40960]
training loss: 310.652222  [43520/99840], accuracy 88.54% [38533/43520]
training loss: 313.815704  [46080/99840], accuracy 88.50% [40780/46080]
training loss: 310.419159  [48640/99840], accuracy 88.50% [43044/48640]
training loss: 318.092285  [51200/99840], accuracy 88.50% [45314/51200]
training loss: 310.290466  [53760/99840], accuracy 88.54% [47598/53760]
training loss: 314.921295  [56320/99840], accuracy 88.55% [49869/56320]
training loss: 311.273407  [58880/99840], accuracy 88.58% [52153/58880]
training loss: 311.807983  [61440/99840], accuracy 88.61% [54443/61440]
training loss: 314.608276  [64000/99840], accuracy 88.59% [56697/64000]
training loss: 319.030212  [66560/99840], accuracy 88.57% [58954/66560]
training loss: 318.754974  [69120/99840], accuracy 88.59% [61236/69120]
training loss: 312.331512  [71680/99840], accuracy 88.57% [63489/71680]
training loss: 310.796844  [74240/99840], accuracy 88.57% [65757/74240]
training loss: 308.180969  [76800/99840], accuracy 88.62% [68058/76800]
training loss: 313.288208  [79360/99840], accuracy 88.64% [70341/79360]
training loss: 314.314575  [81920/99840], accuracy 88.66% [72629/81920]
training loss: 315.299805  [84480/99840], accuracy 88.65% [74889/84480]
training loss: 316.020264  [87040/99840], accuracy 88.62% [77139/87040]
training loss: 311.762543  [89600/99840], accuracy 88.62% [79407/89600]
training loss: 315.827972  [92160/99840], accuracy 88.64% [81692/92160]
training loss: 312.664185  [94720/99840], accuracy 88.63% [83952/94720]
training loss: 313.184082  [97280/99840], accuracy 88.62% [86213/97280]
training loss: 313.910004  [99840/99840], accuracy 88.60% [88462/99840]
training avg loss: 2.446789  [99840/99840]
training accuracy: 88.60% [88462/99840]
validation avg loss: 2.448861
validation accuracy: 87.89% [21937/24960]

saving model

Epoch 13
training loss: 313.791595  [ 2560/99840], accuracy 88.05% [ 2254/ 2560]
training loss: 311.988617  [ 5120/99840], accuracy 88.14% [ 4513/ 5120]
training loss: 314.933167  [ 7680/99840], accuracy 88.27% [ 6779/ 7680]
training loss: 315.742676  [10240/99840], accuracy 88.34% [ 9046/10240]
training loss: 312.151611  [12800/99840], accuracy 88.57% [11337/12800]
training loss: 311.146637  [15360/99840], accuracy 88.61% [13611/15360]
training loss: 310.440094  [17920/99840], accuracy 88.77% [15907/17920]
training loss: 318.581573  [20480/99840], accuracy 88.68% [18162/20480]
training loss: 309.622772  [23040/99840], accuracy 88.55% [20402/23040]
training loss: 315.006836  [25600/99840], accuracy 88.50% [22655/25600]
training loss: 309.673859  [28160/99840], accuracy 88.45% [24907/28160]
training loss: 320.754425  [30720/99840], accuracy 88.41% [27161/30720]
training loss: 318.076660  [33280/99840], accuracy 88.41% [29422/33280]
training loss: 320.228821  [35840/99840], accuracy 88.53% [31729/35840]
training loss: 315.238220  [38400/99840], accuracy 88.63% [34033/38400]
training loss: 311.588715  [40960/99840], accuracy 88.69% [36326/40960]
training loss: 311.478851  [43520/99840], accuracy 88.73% [38615/43520]
training loss: 313.189972  [46080/99840], accuracy 88.77% [40903/46080]
training loss: 313.366394  [48640/99840], accuracy 88.79% [43189/48640]
training loss: 315.494537  [51200/99840], accuracy 88.80% [45465/51200]
training loss: 307.425415  [53760/99840], accuracy 88.82% [47752/53760]
training loss: 312.735413  [56320/99840], accuracy 88.80% [50014/56320]
training loss: 315.353882  [58880/99840], accuracy 88.83% [52304/58880]
training loss: 310.395264  [61440/99840], accuracy 88.89% [54614/61440]
training loss: 313.728333  [64000/99840], accuracy 88.89% [56887/64000]
training loss: 316.634888  [66560/99840], accuracy 88.89% [59167/66560]
training loss: 306.644714  [69120/99840], accuracy 88.90% [61445/69120]
training loss: 313.438660  [71680/99840], accuracy 88.91% [63729/71680]
training loss: 308.246185  [74240/99840], accuracy 88.90% [66003/74240]
training loss: 316.980957  [76800/99840], accuracy 88.93% [68301/76800]
training loss: 316.305756  [79360/99840], accuracy 88.94% [70582/79360]
training loss: 316.281189  [81920/99840], accuracy 88.96% [72872/81920]
training loss: 318.982056  [84480/99840], accuracy 88.94% [75135/84480]
training loss: 310.519073  [87040/99840], accuracy 88.95% [77421/87040]
training loss: 313.440460  [89600/99840], accuracy 88.92% [79674/89600]
training loss: 309.745789  [92160/99840], accuracy 88.94% [81964/92160]
training loss: 314.538605  [94720/99840], accuracy 88.92% [84227/94720]
training loss: 312.770630  [97280/99840], accuracy 88.92% [86499/97280]
training loss: 309.924774  [99840/99840], accuracy 88.91% [88772/99840]
training avg loss: 2.442355  [99840/99840]
training accuracy: 88.91% [88772/99840]
validation avg loss: 2.446261
validation accuracy: 88.11% [21993/24960]

saving model

Epoch 14
training loss: 307.839264  [ 2560/99840], accuracy 89.57% [ 2293/ 2560]
training loss: 309.823059  [ 5120/99840], accuracy 89.45% [ 4580/ 5120]
training loss: 311.649261  [ 7680/99840], accuracy 89.64% [ 6884/ 7680]
training loss: 308.887329  [10240/99840], accuracy 89.73% [ 9188/10240]
training loss: 310.018341  [12800/99840], accuracy 89.61% [11470/12800]
training loss: 308.877197  [15360/99840], accuracy 89.73% [13783/15360]
training loss: 315.001038  [17920/99840], accuracy 89.59% [16054/17920]
training loss: 313.653595  [20480/99840], accuracy 89.69% [18369/20480]
training loss: 318.706055  [23040/99840], accuracy 89.64% [20653/23040]
training loss: 314.604095  [25600/99840], accuracy 89.50% [22913/25600]
training loss: 311.503662  [28160/99840], accuracy 89.57% [25224/28160]
training loss: 311.782562  [30720/99840], accuracy 89.47% [27485/30720]
training loss: 313.275208  [33280/99840], accuracy 89.43% [29762/33280]
training loss: 307.995483  [35840/99840], accuracy 89.39% [32039/35840]
training loss: 313.873291  [38400/99840], accuracy 89.31% [34295/38400]
training loss: 311.628754  [40960/99840], accuracy 89.28% [36569/40960]
training loss: 318.165497  [43520/99840], accuracy 89.19% [38815/43520]
training loss: 306.295227  [46080/99840], accuracy 89.17% [41089/46080]
training loss: 313.758911  [48640/99840], accuracy 89.16% [43368/48640]
training loss: 312.526306  [51200/99840], accuracy 89.19% [45665/51200]
training loss: 303.500702  [53760/99840], accuracy 89.23% [47972/53760]
training loss: 305.292114  [56320/99840], accuracy 89.25% [50267/56320]
training loss: 317.059052  [58880/99840], accuracy 89.24% [52546/58880]
training loss: 311.744141  [61440/99840], accuracy 89.23% [54820/61440]
training loss: 310.641968  [64000/99840], accuracy 89.23% [57105/64000]
training loss: 306.759369  [66560/99840], accuracy 89.24% [59400/66560]
training loss: 314.251617  [69120/99840], accuracy 89.22% [61666/69120]
training loss: 308.627136  [71680/99840], accuracy 89.26% [63981/71680]
training loss: 310.708618  [74240/99840], accuracy 89.28% [66285/74240]
training loss: 309.390961  [76800/99840], accuracy 89.27% [68561/76800]
training loss: 314.505493  [79360/99840], accuracy 89.23% [70816/79360]
training loss: 309.279358  [81920/99840], accuracy 89.27% [73127/81920]
training loss: 312.451019  [84480/99840], accuracy 89.24% [75394/84480]
training loss: 309.378326  [87040/99840], accuracy 89.27% [77703/87040]
training loss: 313.421265  [89600/99840], accuracy 89.26% [79978/89600]
training loss: 313.276581  [92160/99840], accuracy 89.27% [82269/92160]
training loss: 315.806061  [94720/99840], accuracy 89.26% [84548/94720]
training loss: 312.524994  [97280/99840], accuracy 89.24% [86817/97280]
training loss: 316.680298  [99840/99840], accuracy 89.22% [89078/99840]
training avg loss: 2.438842  [99840/99840]
training accuracy: 89.22% [89078/99840]
validation avg loss: 2.444578
validation accuracy: 88.25% [22026/24960]

saving model

Epoch 15
training loss: 314.937164  [ 2560/99840], accuracy 89.06% [ 2280/ 2560]
training loss: 313.057526  [ 5120/99840], accuracy 89.00% [ 4557/ 5120]
training loss: 312.899902  [ 7680/99840], accuracy 88.98% [ 6834/ 7680]
training loss: 307.555542  [10240/99840], accuracy 89.42% [ 9157/10240]
training loss: 312.619568  [12800/99840], accuracy 89.52% [11458/12800]
training loss: 309.001984  [15360/99840], accuracy 89.67% [13773/15360]
training loss: 313.542297  [17920/99840], accuracy 89.56% [16050/17920]
training loss: 312.534088  [20480/99840], accuracy 89.62% [18355/20480]
training loss: 313.725220  [23040/99840], accuracy 89.53% [20628/23040]
training loss: 309.579529  [25600/99840], accuracy 89.44% [22896/25600]
training loss: 306.871277  [28160/99840], accuracy 89.56% [25219/28160]
training loss: 312.740509  [30720/99840], accuracy 89.56% [27514/30720]
training loss: 313.911774  [33280/99840], accuracy 89.58% [29812/33280]
training loss: 321.186768  [35840/99840], accuracy 89.50% [32077/35840]
training loss: 316.139252  [38400/99840], accuracy 89.47% [34355/38400]
training loss: 310.292053  [40960/99840], accuracy 89.44% [36633/40960]
training loss: 313.640259  [43520/99840], accuracy 89.50% [38951/43520]
training loss: 315.303223  [46080/99840], accuracy 89.54% [41261/46080]
training loss: 319.507263  [48640/99840], accuracy 89.45% [43510/48640]
training loss: 310.829803  [51200/99840], accuracy 89.48% [45813/51200]
training loss: 313.884857  [53760/99840], accuracy 89.48% [48107/53760]
training loss: 309.949341  [56320/99840], accuracy 89.50% [50404/56320]
training loss: 314.049561  [58880/99840], accuracy 89.48% [52688/58880]
training loss: 306.606873  [61440/99840], accuracy 89.44% [54950/61440]
training loss: 314.833221  [64000/99840], accuracy 89.41% [57224/64000]
training loss: 312.750702  [66560/99840], accuracy 89.42% [59517/66560]
training loss: 309.697144  [69120/99840], accuracy 89.45% [61827/69120]
training loss: 308.747101  [71680/99840], accuracy 89.47% [64129/71680]
training loss: 309.958466  [74240/99840], accuracy 89.49% [66435/74240]
training loss: 309.768768  [76800/99840], accuracy 89.50% [68733/76800]
training loss: 308.399109  [79360/99840], accuracy 89.50% [71029/79360]
training loss: 307.531311  [81920/99840], accuracy 89.51% [73329/81920]
training loss: 309.099182  [84480/99840], accuracy 89.49% [75600/84480]
training loss: 314.610474  [87040/99840], accuracy 89.50% [77900/87040]
training loss: 311.576172  [89600/99840], accuracy 89.47% [80166/89600]
training loss: 314.884277  [92160/99840], accuracy 89.50% [82483/92160]
training loss: 314.502533  [94720/99840], accuracy 89.50% [84770/94720]
training loss: 313.861389  [97280/99840], accuracy 89.47% [87036/97280]
training loss: 313.176910  [99840/99840], accuracy 89.46% [89321/99840]
training avg loss: 2.435365  [99840/99840]
training accuracy: 89.46% [89321/99840]
validation avg loss: 2.443490
validation accuracy: 88.31% [22042/24960]

saving model

Epoch 16
training loss: 306.864227  [ 2560/99840], accuracy 89.38% [ 2288/ 2560]
training loss: 317.495300  [ 5120/99840], accuracy 89.12% [ 4563/ 5120]
training loss: 309.496826  [ 7680/99840], accuracy 89.39% [ 6865/ 7680]
training loss: 312.024658  [10240/99840], accuracy 89.57% [ 9172/10240]
training loss: 307.550079  [12800/99840], accuracy 89.61% [11470/12800]
training loss: 310.673523  [15360/99840], accuracy 89.65% [13771/15360]
training loss: 313.660919  [17920/99840], accuracy 89.69% [16073/17920]
training loss: 311.191071  [20480/99840], accuracy 89.61% [18353/20480]
training loss: 308.654388  [23040/99840], accuracy 89.59% [20642/23040]
training loss: 310.993622  [25600/99840], accuracy 89.59% [22935/25600]
training loss: 310.892242  [28160/99840], accuracy 89.63% [25240/28160]
training loss: 316.952637  [30720/99840], accuracy 89.62% [27531/30720]
training loss: 315.372925  [33280/99840], accuracy 89.67% [29841/33280]
training loss: 315.998474  [35840/99840], accuracy 89.60% [32114/35840]
training loss: 307.848236  [38400/99840], accuracy 89.61% [34411/38400]
training loss: 311.632843  [40960/99840], accuracy 89.60% [36701/40960]
training loss: 307.685028  [43520/99840], accuracy 89.55% [38970/43520]
training loss: 309.225311  [46080/99840], accuracy 89.53% [41254/46080]
training loss: 312.092102  [48640/99840], accuracy 89.53% [43548/48640]
training loss: 311.529572  [51200/99840], accuracy 89.49% [45820/51200]
training loss: 315.096191  [53760/99840], accuracy 89.46% [48093/53760]
training loss: 313.088531  [56320/99840], accuracy 89.46% [50382/56320]
training loss: 311.326752  [58880/99840], accuracy 89.50% [52696/58880]
training loss: 308.432648  [61440/99840], accuracy 89.53% [55006/61440]
training loss: 310.464508  [64000/99840], accuracy 89.53% [57300/64000]
training loss: 315.309540  [66560/99840], accuracy 89.51% [59576/66560]
training loss: 310.425873  [69120/99840], accuracy 89.52% [61876/69120]
training loss: 307.441284  [71680/99840], accuracy 89.53% [64173/71680]
training loss: 310.436401  [74240/99840], accuracy 89.51% [66453/74240]
training loss: 308.326172  [76800/99840], accuracy 89.52% [68750/76800]
training loss: 314.190765  [79360/99840], accuracy 89.50% [71025/79360]
training loss: 307.554077  [81920/99840], accuracy 89.54% [73350/81920]
training loss: 310.002502  [84480/99840], accuracy 89.55% [75654/84480]
training loss: 311.071777  [87040/99840], accuracy 89.56% [77953/87040]
training loss: 309.507629  [89600/99840], accuracy 89.58% [80266/89600]
training loss: 303.166382  [92160/99840], accuracy 89.58% [82561/92160]
training loss: 310.444214  [94720/99840], accuracy 89.62% [84885/94720]
training loss: 315.559265  [97280/99840], accuracy 89.61% [87176/97280]
training loss: 316.031219  [99840/99840], accuracy 89.62% [89474/99840]
training avg loss: 2.433553  [99840/99840]
training accuracy: 89.62% [89474/99840]
validation avg loss: 2.442903
validation accuracy: 88.34% [22049/24960]

saving model

Epoch 17
training loss: 311.308716  [ 2560/99840], accuracy 89.73% [ 2297/ 2560]
training loss: 311.941650  [ 5120/99840], accuracy 89.18% [ 4566/ 5120]
training loss: 310.963257  [ 7680/99840], accuracy 89.24% [ 6854/ 7680]
training loss: 308.299042  [10240/99840], accuracy 89.43% [ 9158/10240]
training loss: 312.898468  [12800/99840], accuracy 89.61% [11470/12800]
training loss: 308.746765  [15360/99840], accuracy 89.67% [13773/15360]
training loss: 306.358673  [17920/99840], accuracy 89.73% [16080/17920]
training loss: 314.131134  [20480/99840], accuracy 89.74% [18378/20480]
training loss: 308.362213  [23040/99840], accuracy 89.87% [20705/23040]
training loss: 306.119385  [25600/99840], accuracy 89.88% [23010/25600]
training loss: 307.656525  [28160/99840], accuracy 89.90% [25317/28160]
training loss: 307.532501  [30720/99840], accuracy 89.90% [27616/30720]
training loss: 309.443726  [33280/99840], accuracy 89.83% [29896/33280]
training loss: 310.049011  [35840/99840], accuracy 89.80% [32184/35840]
training loss: 306.722534  [38400/99840], accuracy 89.74% [34461/38400]
training loss: 313.608398  [40960/99840], accuracy 89.74% [36759/40960]
training loss: 313.328949  [43520/99840], accuracy 89.75% [39058/43520]
training loss: 313.455872  [46080/99840], accuracy 89.70% [41333/46080]
training loss: 308.399567  [48640/99840], accuracy 89.75% [43655/48640]
training loss: 308.542328  [51200/99840], accuracy 89.72% [45939/51200]
training loss: 318.705231  [53760/99840], accuracy 89.74% [48244/53760]
training loss: 312.521942  [56320/99840], accuracy 89.74% [50543/56320]
training loss: 307.426971  [58880/99840], accuracy 89.81% [52878/58880]
training loss: 310.176605  [61440/99840], accuracy 89.80% [55176/61440]
training loss: 314.399170  [64000/99840], accuracy 89.81% [57476/64000]
training loss: 313.141022  [66560/99840], accuracy 89.81% [59778/66560]
training loss: 316.378082  [69120/99840], accuracy 89.80% [62072/69120]
training loss: 314.100250  [71680/99840], accuracy 89.80% [64372/71680]
training loss: 306.771149  [74240/99840], accuracy 89.82% [66685/74240]
training loss: 313.536163  [76800/99840], accuracy 89.82% [68983/76800]
training loss: 314.587921  [79360/99840], accuracy 89.85% [71303/79360]
training loss: 309.637604  [81920/99840], accuracy 89.82% [73581/81920]
training loss: 310.346405  [84480/99840], accuracy 89.82% [75883/84480]
training loss: 308.497437  [87040/99840], accuracy 89.82% [78178/87040]
training loss: 315.361176  [89600/99840], accuracy 89.80% [80464/89600]
training loss: 308.752106  [92160/99840], accuracy 89.80% [82763/92160]
training loss: 304.385620  [94720/99840], accuracy 89.77% [85030/94720]
training loss: 312.233154  [97280/99840], accuracy 89.79% [87345/97280]
training loss: 310.526855  [99840/99840], accuracy 89.79% [89645/99840]
training avg loss: 2.431293  [99840/99840]
training accuracy: 89.79% [89645/99840]
validation avg loss: 2.442146
validation accuracy: 88.35% [22051/24960]

saving model

Epoch 18
training loss: 313.938751  [ 2560/99840], accuracy 90.59% [ 2319/ 2560]
training loss: 309.841064  [ 5120/99840], accuracy 89.92% [ 4604/ 5120]
training loss: 313.694977  [ 7680/99840], accuracy 90.22% [ 6929/ 7680]
training loss: 308.032867  [10240/99840], accuracy 90.30% [ 9247/10240]
training loss: 309.962585  [12800/99840], accuracy 90.25% [11552/12800]
training loss: 309.750946  [15360/99840], accuracy 90.29% [13868/15360]
training loss: 313.030121  [17920/99840], accuracy 90.16% [16156/17920]
training loss: 314.318970  [20480/99840], accuracy 90.03% [18438/20480]
training loss: 313.805267  [23040/99840], accuracy 89.99% [20733/23040]
training loss: 308.886627  [25600/99840], accuracy 89.97% [23033/25600]
training loss: 313.050446  [28160/99840], accuracy 89.99% [25341/28160]
training loss: 313.130768  [30720/99840], accuracy 89.92% [27622/30720]
training loss: 309.430573  [33280/99840], accuracy 89.92% [29926/33280]
training loss: 313.621460  [35840/99840], accuracy 89.93% [32230/35840]
training loss: 313.340729  [38400/99840], accuracy 89.91% [34524/38400]
training loss: 306.415771  [40960/99840], accuracy 89.90% [36821/40960]
training loss: 307.753326  [43520/99840], accuracy 89.87% [39112/43520]
training loss: 306.321442  [46080/99840], accuracy 89.85% [41402/46080]
training loss: 313.247772  [48640/99840], accuracy 89.81% [43683/48640]
training loss: 309.275146  [51200/99840], accuracy 89.79% [45973/51200]
training loss: 310.485779  [53760/99840], accuracy 89.84% [48298/53760]
training loss: 306.935974  [56320/99840], accuracy 89.83% [50590/56320]
training loss: 310.930603  [58880/99840], accuracy 89.82% [52887/58880]
training loss: 311.584015  [61440/99840], accuracy 89.82% [55188/61440]
training loss: 305.215942  [64000/99840], accuracy 89.82% [57487/64000]
training loss: 304.891357  [66560/99840], accuracy 89.86% [59813/66560]
training loss: 322.298920  [69120/99840], accuracy 89.88% [62127/69120]
training loss: 313.445831  [71680/99840], accuracy 89.88% [64428/71680]
training loss: 314.923309  [74240/99840], accuracy 89.86% [66713/74240]
training loss: 309.672150  [76800/99840], accuracy 89.88% [69027/76800]
training loss: 308.333832  [79360/99840], accuracy 89.87% [71324/79360]
training loss: 309.889648  [81920/99840], accuracy 89.87% [73625/81920]
training loss: 309.942078  [84480/99840], accuracy 89.90% [75947/84480]
training loss: 305.291077  [87040/99840], accuracy 89.92% [78264/87040]
training loss: 313.420807  [89600/99840], accuracy 89.91% [80558/89600]
training loss: 310.927002  [92160/99840], accuracy 89.91% [82865/92160]
training loss: 311.232758  [94720/99840], accuracy 89.93% [85177/94720]
training loss: 310.002106  [97280/99840], accuracy 89.95% [87505/97280]
training loss: 310.704010  [99840/99840], accuracy 89.95% [89805/99840]
training avg loss: 2.429278  [99840/99840]
training accuracy: 89.95% [89805/99840]
validation avg loss: 2.441384
validation accuracy: 88.41% [22067/24960]

saving model

Epoch 19
training loss: 314.808563  [ 2560/99840], accuracy 90.00% [ 2304/ 2560]
training loss: 311.230347  [ 5120/99840], accuracy 89.98% [ 4607/ 5120]
training loss: 310.241425  [ 7680/99840], accuracy 90.07% [ 6917/ 7680]
training loss: 315.923767  [10240/99840], accuracy 89.86% [ 9202/10240]
training loss: 306.550232  [12800/99840], accuracy 89.76% [11489/12800]
training loss: 310.573822  [15360/99840], accuracy 89.90% [13809/15360]
training loss: 308.997589  [17920/99840], accuracy 89.97% [16122/17920]
training loss: 310.087982  [20480/99840], accuracy 89.89% [18410/20480]
training loss: 311.571594  [23040/99840], accuracy 90.00% [20735/23040]
training loss: 311.957001  [25600/99840], accuracy 89.95% [23027/25600]
training loss: 309.490265  [28160/99840], accuracy 89.94% [25327/28160]
training loss: 311.926849  [30720/99840], accuracy 89.90% [27618/30720]
training loss: 307.577301  [33280/99840], accuracy 90.01% [29956/33280]
training loss: 311.453583  [35840/99840], accuracy 89.98% [32249/35840]
training loss: 309.798065  [38400/99840], accuracy 89.98% [34551/38400]
training loss: 315.066956  [40960/99840], accuracy 89.94% [36838/40960]
training loss: 308.566681  [43520/99840], accuracy 90.00% [39169/43520]
training loss: 315.033752  [46080/99840], accuracy 89.93% [41442/46080]
training loss: 312.112427  [48640/99840], accuracy 89.97% [43760/48640]
training loss: 310.921051  [51200/99840], accuracy 89.94% [46048/51200]
training loss: 307.525299  [53760/99840], accuracy 89.91% [48334/53760]
training loss: 305.425934  [56320/99840], accuracy 89.91% [50635/56320]
training loss: 308.436798  [58880/99840], accuracy 89.96% [52966/58880]
training loss: 304.678101  [61440/99840], accuracy 90.00% [55299/61440]
training loss: 310.949402  [64000/99840], accuracy 90.02% [57614/64000]
training loss: 307.441101  [66560/99840], accuracy 90.01% [59908/66560]
training loss: 312.969330  [69120/99840], accuracy 90.02% [62222/69120]
training loss: 311.528229  [71680/99840], accuracy 90.03% [64537/71680]
training loss: 308.906555  [74240/99840], accuracy 90.02% [66828/74240]
training loss: 308.772491  [76800/99840], accuracy 89.99% [69113/76800]
training loss: 309.931763  [79360/99840], accuracy 89.98% [71405/79360]
training loss: 310.932373  [81920/99840], accuracy 89.97% [73703/81920]
training loss: 314.807251  [84480/99840], accuracy 89.97% [76003/84480]
training loss: 313.774323  [87040/99840], accuracy 90.00% [78333/87040]
training loss: 317.446014  [89600/99840], accuracy 90.01% [80645/89600]
training loss: 304.810486  [92160/99840], accuracy 90.03% [82972/92160]
training loss: 308.667053  [94720/99840], accuracy 90.05% [85296/94720]
training loss: 308.537292  [97280/99840], accuracy 90.03% [87583/97280]
training loss: 309.762177  [99840/99840], accuracy 90.05% [89907/99840]
training avg loss: 2.427960  [99840/99840]
training accuracy: 90.05% [89907/99840]
validation avg loss: 2.441005
validation accuracy: 88.44% [22074/24960]

saving model

Epoch 20
training loss: 308.572510  [ 2560/99840], accuracy 90.47% [ 2316/ 2560]
training loss: 309.615784  [ 5120/99840], accuracy 90.45% [ 4631/ 5120]
training loss: 305.283325  [ 7680/99840], accuracy 90.18% [ 6926/ 7680]
training loss: 306.587402  [10240/99840], accuracy 90.21% [ 9238/10240]
training loss: 310.188263  [12800/99840], accuracy 90.31% [11560/12800]
training loss: 307.396515  [15360/99840], accuracy 90.22% [13858/15360]
training loss: 323.361237  [17920/99840], accuracy 90.40% [16200/17920]
training loss: 309.960510  [20480/99840], accuracy 90.29% [18492/20480]
training loss: 310.864136  [23040/99840], accuracy 90.34% [20814/23040]
training loss: 306.184509  [25600/99840], accuracy 90.31% [23120/25600]
training loss: 311.381622  [28160/99840], accuracy 90.27% [25419/28160]
training loss: 314.436249  [30720/99840], accuracy 90.24% [27721/30720]
training loss: 308.663910  [33280/99840], accuracy 90.23% [30029/33280]
training loss: 310.763672  [35840/99840], accuracy 90.26% [32350/35840]
training loss: 309.530884  [38400/99840], accuracy 90.26% [34660/38400]
training loss: 310.351807  [40960/99840], accuracy 90.30% [36987/40960]
training loss: 313.737915  [43520/99840], accuracy 90.32% [39307/43520]
training loss: 310.282013  [46080/99840], accuracy 90.30% [41608/46080]
training loss: 305.030457  [48640/99840], accuracy 90.32% [43930/48640]
training loss: 307.003235  [51200/99840], accuracy 90.29% [46227/51200]
training loss: 309.335175  [53760/99840], accuracy 90.24% [48514/53760]
training loss: 309.296539  [56320/99840], accuracy 90.19% [50796/56320]
training loss: 307.980591  [58880/99840], accuracy 90.20% [53112/58880]
training loss: 311.322906  [61440/99840], accuracy 90.23% [55437/61440]
training loss: 309.175629  [64000/99840], accuracy 90.27% [57773/64000]
training loss: 314.411926  [66560/99840], accuracy 90.29% [60096/66560]
training loss: 310.775574  [69120/99840], accuracy 90.28% [62402/69120]
training loss: 311.722565  [71680/99840], accuracy 90.26% [64698/71680]
training loss: 313.441925  [74240/99840], accuracy 90.27% [67020/74240]
training loss: 307.269135  [76800/99840], accuracy 90.26% [69321/76800]
training loss: 320.696045  [79360/99840], accuracy 90.24% [71614/79360]
training loss: 312.360352  [81920/99840], accuracy 90.23% [73920/81920]
training loss: 313.960663  [84480/99840], accuracy 90.24% [76238/84480]
training loss: 307.615356  [87040/99840], accuracy 90.23% [78540/87040]
training loss: 309.338806  [89600/99840], accuracy 90.23% [80848/89600]
training loss: 309.591583  [92160/99840], accuracy 90.24% [83166/92160]
training loss: 309.149261  [94720/99840], accuracy 90.24% [85472/94720]
training loss: 305.804657  [97280/99840], accuracy 90.24% [87789/97280]
training loss: 306.905090  [99840/99840], accuracy 90.25% [90104/99840]
training avg loss: 2.426075  [99840/99840]
training accuracy: 90.25% [90104/99840]
validation avg loss: 2.440198
validation accuracy: 88.53% [22097/24960]

saving model

Epoch 21
training loss: 312.793060  [ 2560/99840], accuracy 90.20% [ 2309/ 2560]
training loss: 309.705750  [ 5120/99840], accuracy 90.78% [ 4648/ 5120]
training loss: 313.765259  [ 7680/99840], accuracy 90.74% [ 6969/ 7680]
training loss: 310.203033  [10240/99840], accuracy 90.57% [ 9274/10240]
training loss: 311.659729  [12800/99840], accuracy 90.49% [11583/12800]
training loss: 311.397186  [15360/99840], accuracy 90.54% [13907/15360]
training loss: 309.761658  [17920/99840], accuracy 90.39% [16198/17920]
training loss: 315.148773  [20480/99840], accuracy 90.46% [18527/20480]
training loss: 311.789093  [23040/99840], accuracy 90.48% [20847/23040]
training loss: 309.776245  [25600/99840], accuracy 90.49% [23166/25600]
training loss: 308.997070  [28160/99840], accuracy 90.53% [25494/28160]
training loss: 307.671265  [30720/99840], accuracy 90.53% [27811/30720]
training loss: 303.769196  [33280/99840], accuracy 90.54% [30132/33280]
training loss: 306.217133  [35840/99840], accuracy 90.62% [32479/35840]
training loss: 308.873627  [38400/99840], accuracy 90.61% [34796/38400]
training loss: 307.589417  [40960/99840], accuracy 90.70% [37150/40960]
training loss: 311.550842  [43520/99840], accuracy 90.73% [39484/43520]
training loss: 316.753235  [46080/99840], accuracy 90.75% [41819/46080]
training loss: 309.096344  [48640/99840], accuracy 90.76% [44148/48640]
training loss: 310.240662  [51200/99840], accuracy 90.71% [46442/51200]
training loss: 305.413055  [53760/99840], accuracy 90.70% [48758/53760]
training loss: 311.965759  [56320/99840], accuracy 90.68% [51072/56320]
training loss: 309.198303  [58880/99840], accuracy 90.62% [53359/58880]
training loss: 309.773956  [61440/99840], accuracy 90.55% [55636/61440]
training loss: 309.487488  [64000/99840], accuracy 90.52% [57933/64000]
training loss: 305.175537  [66560/99840], accuracy 90.52% [60251/66560]
training loss: 306.272217  [69120/99840], accuracy 90.52% [62565/69120]
training loss: 313.157562  [71680/99840], accuracy 90.48% [64859/71680]
training loss: 311.960907  [74240/99840], accuracy 90.49% [67179/74240]
training loss: 308.853638  [76800/99840], accuracy 90.45% [69465/76800]
training loss: 312.519196  [79360/99840], accuracy 90.45% [71780/79360]
training loss: 309.375397  [81920/99840], accuracy 90.43% [74079/81920]
training loss: 310.561066  [84480/99840], accuracy 90.43% [76399/84480]
training loss: 317.577209  [87040/99840], accuracy 90.43% [78709/87040]
training loss: 308.784943  [89600/99840], accuracy 90.43% [81025/89600]
training loss: 311.847351  [92160/99840], accuracy 90.41% [83325/92160]
training loss: 311.723907  [94720/99840], accuracy 90.39% [85620/94720]
training loss: 314.846680  [97280/99840], accuracy 90.39% [87931/97280]
training loss: 308.451874  [99840/99840], accuracy 90.38% [90236/99840]
training avg loss: 2.424209  [99840/99840]
training accuracy: 90.38% [90236/99840]
validation avg loss: 2.440579
validation accuracy: 88.49% [22088/24960]

saving model

Epoch 22
training loss: 313.355774  [ 2560/99840], accuracy 90.31% [ 2312/ 2560]
training loss: 312.692291  [ 5120/99840], accuracy 90.14% [ 4615/ 5120]
training loss: 308.881409  [ 7680/99840], accuracy 90.21% [ 6928/ 7680]
training loss: 306.775909  [10240/99840], accuracy 90.23% [ 9240/10240]
training loss: 306.047424  [12800/99840], accuracy 90.32% [11561/12800]
training loss: 311.504486  [15360/99840], accuracy 90.34% [13876/15360]
training loss: 307.713196  [17920/99840], accuracy 90.32% [16186/17920]
training loss: 312.955688  [20480/99840], accuracy 90.27% [18487/20480]
training loss: 307.465759  [23040/99840], accuracy 90.27% [20798/23040]
training loss: 309.839020  [25600/99840], accuracy 90.23% [23098/25600]
training loss: 317.228394  [28160/99840], accuracy 90.26% [25418/28160]
training loss: 308.026428  [30720/99840], accuracy 90.29% [27737/30720]
training loss: 312.015442  [33280/99840], accuracy 90.31% [30054/33280]
training loss: 306.711639  [35840/99840], accuracy 90.33% [32376/35840]
training loss: 307.731995  [38400/99840], accuracy 90.42% [34723/38400]
training loss: 306.368042  [40960/99840], accuracy 90.41% [37032/40960]
training loss: 310.205963  [43520/99840], accuracy 90.43% [39355/43520]
training loss: 305.255768  [46080/99840], accuracy 90.43% [41672/46080]
training loss: 311.909180  [48640/99840], accuracy 90.43% [43987/48640]
training loss: 305.629242  [51200/99840], accuracy 90.48% [46328/51200]
training loss: 311.977570  [53760/99840], accuracy 90.52% [48661/53760]
training loss: 311.002319  [56320/99840], accuracy 90.52% [50981/56320]
training loss: 310.181183  [58880/99840], accuracy 90.51% [53291/58880]
training loss: 308.847260  [61440/99840], accuracy 90.51% [55609/61440]
training loss: 314.709717  [64000/99840], accuracy 90.51% [57925/64000]
training loss: 311.790161  [66560/99840], accuracy 90.53% [60255/66560]
training loss: 314.629700  [69120/99840], accuracy 90.51% [62560/69120]
training loss: 312.989105  [71680/99840], accuracy 90.49% [64861/71680]
training loss: 310.896667  [74240/99840], accuracy 90.46% [67160/74240]
training loss: 306.812225  [76800/99840], accuracy 90.43% [69447/76800]
training loss: 314.588531  [79360/99840], accuracy 90.41% [71749/79360]
training loss: 309.681213  [81920/99840], accuracy 90.41% [74066/81920]
training loss: 311.484314  [84480/99840], accuracy 90.42% [76383/84480]
training loss: 312.973846  [87040/99840], accuracy 90.42% [78700/87040]
training loss: 303.802887  [89600/99840], accuracy 90.44% [81034/89600]
training loss: 313.875336  [92160/99840], accuracy 90.44% [83347/92160]
training loss: 312.798828  [94720/99840], accuracy 90.45% [85670/94720]
training loss: 308.435638  [97280/99840], accuracy 90.45% [87990/97280]
training loss: 309.872131  [99840/99840], accuracy 90.45% [90307/99840]
training avg loss: 2.423262  [99840/99840]
training accuracy: 90.45% [90307/99840]
validation avg loss: 2.439272
validation accuracy: 88.56% [22105/24960]

saving model

Epoch 23
training loss: 308.962433  [ 2560/99840], accuracy 90.16% [ 2308/ 2560]
training loss: 310.013458  [ 5120/99840], accuracy 90.35% [ 4626/ 5120]
training loss: 311.254608  [ 7680/99840], accuracy 90.49% [ 6950/ 7680]
training loss: 309.261963  [10240/99840], accuracy 90.53% [ 9270/10240]
training loss: 316.444214  [12800/99840], accuracy 90.63% [11601/12800]
training loss: 308.804993  [15360/99840], accuracy 90.61% [13918/15360]
training loss: 304.109894  [17920/99840], accuracy 90.63% [16241/17920]
training loss: 311.435699  [20480/99840], accuracy 90.66% [18567/20480]
training loss: 307.870941  [23040/99840], accuracy 90.67% [20891/23040]
training loss: 307.814209  [25600/99840], accuracy 90.63% [23201/25600]
training loss: 304.210938  [28160/99840], accuracy 90.69% [25537/28160]
training loss: 313.911407  [30720/99840], accuracy 90.65% [27847/30720]
training loss: 310.154114  [33280/99840], accuracy 90.60% [30152/33280]
training loss: 312.349121  [35840/99840], accuracy 90.62% [32478/35840]
training loss: 309.091919  [38400/99840], accuracy 90.61% [34793/38400]
training loss: 309.694702  [40960/99840], accuracy 90.60% [37111/40960]
training loss: 312.709930  [43520/99840], accuracy 90.60% [39427/43520]
training loss: 308.537384  [46080/99840], accuracy 90.57% [41733/46080]
training loss: 309.260254  [48640/99840], accuracy 90.55% [44045/48640]
training loss: 312.850800  [51200/99840], accuracy 90.57% [46372/51200]
training loss: 313.350739  [53760/99840], accuracy 90.55% [48681/53760]
training loss: 305.470856  [56320/99840], accuracy 90.57% [51008/56320]
training loss: 307.689575  [58880/99840], accuracy 90.60% [53346/58880]
training loss: 313.204163  [61440/99840], accuracy 90.60% [55666/61440]
training loss: 306.979492  [64000/99840], accuracy 90.61% [57990/64000]
training loss: 311.064514  [66560/99840], accuracy 90.64% [60333/66560]
training loss: 306.981873  [69120/99840], accuracy 90.62% [62635/69120]
training loss: 310.732056  [71680/99840], accuracy 90.62% [64953/71680]
training loss: 312.130615  [74240/99840], accuracy 90.60% [67260/74240]
training loss: 307.084900  [76800/99840], accuracy 90.61% [69586/76800]
training loss: 306.655182  [79360/99840], accuracy 90.62% [71913/79360]
training loss: 312.091919  [81920/99840], accuracy 90.59% [74208/81920]
training loss: 309.821899  [84480/99840], accuracy 90.58% [76519/84480]
training loss: 307.383881  [87040/99840], accuracy 90.59% [78847/87040]
training loss: 309.095428  [89600/99840], accuracy 90.56% [81143/89600]
training loss: 313.908691  [92160/99840], accuracy 90.55% [83448/92160]
training loss: 303.784454  [94720/99840], accuracy 90.57% [85789/94720]
training loss: 312.626251  [97280/99840], accuracy 90.58% [88112/97280]
training loss: 304.461884  [99840/99840], accuracy 90.60% [90454/99840]
training avg loss: 2.421535  [99840/99840]
training accuracy: 90.60% [90454/99840]
validation avg loss: 2.438303
validation accuracy: 88.62% [22120/24960]

saving model

Epoch 24
training loss: 312.267731  [ 2560/99840], accuracy 90.39% [ 2314/ 2560]
training loss: 311.564697  [ 5120/99840], accuracy 90.53% [ 4635/ 5120]
training loss: 311.656769  [ 7680/99840], accuracy 90.43% [ 6945/ 7680]
training loss: 306.470856  [10240/99840], accuracy 90.80% [ 9298/10240]
training loss: 311.120636  [12800/99840], accuracy 90.96% [11643/12800]
training loss: 314.348267  [15360/99840], accuracy 90.98% [13974/15360]
training loss: 308.344635  [17920/99840], accuracy 90.97% [16302/17920]
training loss: 305.913422  [20480/99840], accuracy 91.04% [18645/20480]
training loss: 311.619507  [23040/99840], accuracy 91.04% [20976/23040]
training loss: 307.811218  [25600/99840], accuracy 91.02% [23301/25600]
training loss: 305.174286  [28160/99840], accuracy 91.01% [25628/28160]
training loss: 308.226593  [30720/99840], accuracy 90.99% [27951/30720]
training loss: 309.401672  [33280/99840], accuracy 90.93% [30262/33280]
training loss: 307.931366  [35840/99840], accuracy 90.88% [32573/35840]
training loss: 312.444153  [38400/99840], accuracy 90.85% [34888/38400]
training loss: 305.642731  [40960/99840], accuracy 90.81% [37197/40960]
training loss: 306.361908  [43520/99840], accuracy 90.82% [39524/43520]
training loss: 308.427368  [46080/99840], accuracy 90.81% [41847/46080]
training loss: 312.404663  [48640/99840], accuracy 90.77% [44150/48640]
training loss: 306.259338  [51200/99840], accuracy 90.79% [46483/51200]
training loss: 305.117432  [53760/99840], accuracy 90.78% [48806/53760]
training loss: 307.156036  [56320/99840], accuracy 90.79% [51131/56320]
training loss: 303.800018  [58880/99840], accuracy 90.76% [53437/58880]
training loss: 310.974121  [61440/99840], accuracy 90.76% [55764/61440]
training loss: 315.093964  [64000/99840], accuracy 90.77% [58094/64000]
training loss: 310.815247  [66560/99840], accuracy 90.79% [60430/66560]
training loss: 315.253601  [69120/99840], accuracy 90.80% [62758/69120]
training loss: 310.727875  [71680/99840], accuracy 90.81% [65093/71680]
training loss: 311.852356  [74240/99840], accuracy 90.82% [67423/74240]
training loss: 308.586670  [76800/99840], accuracy 90.83% [69755/76800]
training loss: 306.816162  [79360/99840], accuracy 90.86% [72107/79360]
training loss: 309.778656  [81920/99840], accuracy 90.89% [74460/81920]
training loss: 314.081177  [84480/99840], accuracy 90.89% [76781/84480]
training loss: 309.663391  [87040/99840], accuracy 90.90% [79120/87040]
training loss: 309.581238  [89600/99840], accuracy 90.93% [81472/89600]
training loss: 309.807953  [92160/99840], accuracy 90.93% [83804/92160]
training loss: 306.294128  [94720/99840], accuracy 90.98% [86174/94720]
training loss: 309.431549  [97280/99840], accuracy 90.99% [88511/97280]
training loss: 309.960968  [99840/99840], accuracy 91.01% [90866/99840]
training avg loss: 2.418777  [99840/99840]
training accuracy: 91.01% [90866/99840]
validation avg loss: 2.427128
validation accuracy: 89.95% [22451/24960]

saving model

Epoch 25
training loss: 308.651733  [ 2560/99840], accuracy 91.48% [ 2342/ 2560]
training loss: 315.234222  [ 5120/99840], accuracy 92.05% [ 4713/ 5120]
training loss: 304.432648  [ 7680/99840], accuracy 92.15% [ 7077/ 7680]
training loss: 308.566956  [10240/99840], accuracy 92.13% [ 9434/10240]
training loss: 310.991516  [12800/99840], accuracy 92.04% [11781/12800]
training loss: 316.378082  [15360/99840], accuracy 92.12% [14150/15360]
training loss: 308.101440  [17920/99840], accuracy 92.21% [16524/17920]
training loss: 308.437195  [20480/99840], accuracy 92.13% [18869/20480]
training loss: 305.541962  [23040/99840], accuracy 92.15% [21231/23040]
training loss: 305.494965  [25600/99840], accuracy 92.10% [23578/25600]
training loss: 307.769348  [28160/99840], accuracy 92.15% [25950/28160]
training loss: 304.557556  [30720/99840], accuracy 92.19% [28322/30720]
training loss: 310.339447  [33280/99840], accuracy 92.27% [30707/33280]
training loss: 303.135529  [35840/99840], accuracy 92.32% [33088/35840]
training loss: 307.241241  [38400/99840], accuracy 92.34% [35458/38400]
training loss: 307.275085  [40960/99840], accuracy 92.38% [37838/40960]
training loss: 310.212189  [43520/99840], accuracy 92.37% [40199/43520]
training loss: 307.590149  [46080/99840], accuracy 92.34% [42552/46080]
training loss: 305.702972  [48640/99840], accuracy 92.34% [44914/48640]
training loss: 307.098389  [51200/99840], accuracy 92.38% [47301/51200]
training loss: 309.790710  [53760/99840], accuracy 92.42% [49683/53760]
training loss: 309.572235  [56320/99840], accuracy 92.46% [52073/56320]
training loss: 301.449097  [58880/99840], accuracy 92.47% [54448/58880]
training loss: 307.537018  [61440/99840], accuracy 92.48% [56822/61440]
training loss: 307.616669  [64000/99840], accuracy 92.52% [59214/64000]
training loss: 305.236633  [66560/99840], accuracy 92.53% [61590/66560]
training loss: 310.875916  [69120/99840], accuracy 92.54% [63962/69120]
training loss: 304.485748  [71680/99840], accuracy 92.51% [66310/71680]
training loss: 308.002960  [74240/99840], accuracy 92.53% [68694/74240]
training loss: 306.388428  [76800/99840], accuracy 92.51% [71048/76800]
training loss: 309.240845  [79360/99840], accuracy 92.50% [73407/79360]
training loss: 309.569916  [81920/99840], accuracy 92.51% [75783/81920]
training loss: 303.146149  [84480/99840], accuracy 92.49% [78138/84480]
training loss: 311.118164  [87040/99840], accuracy 92.47% [80485/87040]
training loss: 308.589783  [89600/99840], accuracy 92.46% [82843/89600]
training loss: 306.216339  [92160/99840], accuracy 92.51% [85257/92160]
training loss: 306.079071  [94720/99840], accuracy 92.50% [87619/94720]
training loss: 306.050079  [97280/99840], accuracy 92.52% [89999/97280]
training loss: 304.046326  [99840/99840], accuracy 92.54% [92388/99840]
training avg loss: 2.405737  [99840/99840]
training accuracy: 92.54% [92388/99840]
validation avg loss: 2.415318
validation accuracy: 91.17% [22756/24960]

saving model

Epoch 26
training loss: 307.002502  [ 2560/99840], accuracy 93.20% [ 2386/ 2560]
training loss: 310.051971  [ 5120/99840], accuracy 93.42% [ 4783/ 5120]
training loss: 306.366150  [ 7680/99840], accuracy 93.41% [ 7174/ 7680]
training loss: 312.956787  [10240/99840], accuracy 93.19% [ 9543/10240]
training loss: 314.174194  [12800/99840], accuracy 93.12% [11919/12800]
training loss: 309.882294  [15360/99840], accuracy 92.88% [14267/15360]
training loss: 309.394806  [17920/99840], accuracy 92.85% [16638/17920]
training loss: 307.298615  [20480/99840], accuracy 92.80% [19005/20480]
training loss: 304.325043  [23040/99840], accuracy 92.85% [21392/23040]
training loss: 309.191254  [25600/99840], accuracy 92.95% [23794/25600]
training loss: 304.864685  [28160/99840], accuracy 92.98% [26182/28160]
training loss: 306.272522  [30720/99840], accuracy 92.98% [28564/30720]
training loss: 308.888580  [33280/99840], accuracy 92.94% [30932/33280]
training loss: 307.300781  [35840/99840], accuracy 92.89% [33293/35840]
training loss: 308.814270  [38400/99840], accuracy 92.95% [35694/38400]
training loss: 306.869354  [40960/99840], accuracy 92.94% [38067/40960]
training loss: 307.283173  [43520/99840], accuracy 92.93% [40443/43520]
training loss: 308.977386  [46080/99840], accuracy 92.93% [42824/46080]
training loss: 306.829224  [48640/99840], accuracy 92.96% [45214/48640]
training loss: 304.656097  [51200/99840], accuracy 92.97% [47599/51200]
training loss: 310.145782  [53760/99840], accuracy 92.99% [49994/53760]
training loss: 308.768616  [56320/99840], accuracy 92.98% [52366/56320]
training loss: 306.125763  [58880/99840], accuracy 93.00% [54759/58880]
training loss: 306.356750  [61440/99840], accuracy 93.03% [57155/61440]
training loss: 308.212036  [64000/99840], accuracy 93.08% [59574/64000]
training loss: 310.240021  [66560/99840], accuracy 93.07% [61949/66560]
training loss: 303.615814  [69120/99840], accuracy 93.06% [64322/69120]
training loss: 309.214355  [71680/99840], accuracy 93.09% [66728/71680]
training loss: 304.827820  [74240/99840], accuracy 93.09% [69110/74240]
training loss: 305.246124  [76800/99840], accuracy 93.07% [71479/76800]
training loss: 306.523163  [79360/99840], accuracy 93.08% [73870/79360]
training loss: 306.429596  [81920/99840], accuracy 93.10% [76268/81920]
training loss: 306.667145  [84480/99840], accuracy 93.10% [78648/84480]
training loss: 307.041077  [87040/99840], accuracy 93.14% [81065/87040]
training loss: 301.591888  [89600/99840], accuracy 93.16% [83469/89600]
training loss: 309.654877  [92160/99840], accuracy 93.15% [85851/92160]
training loss: 305.224152  [94720/99840], accuracy 93.15% [88228/94720]
training loss: 306.840210  [97280/99840], accuracy 93.14% [90611/97280]
training loss: 303.342102  [99840/99840], accuracy 93.16% [93011/99840]
training avg loss: 2.398398  [99840/99840]
training accuracy: 93.16% [93011/99840]
validation avg loss: 2.414218
validation accuracy: 91.17% [22755/24960]

saving model

Epoch 27
training loss: 308.396790  [ 2560/99840], accuracy 93.95% [ 2405/ 2560]
training loss: 308.779175  [ 5120/99840], accuracy 93.59% [ 4792/ 5120]
training loss: 305.674957  [ 7680/99840], accuracy 93.31% [ 7166/ 7680]
training loss: 302.688751  [10240/99840], accuracy 93.54% [ 9578/10240]
training loss: 309.843109  [12800/99840], accuracy 93.48% [11965/12800]
training loss: 304.967163  [15360/99840], accuracy 93.33% [14336/15360]
training loss: 308.432465  [17920/99840], accuracy 93.41% [16739/17920]
training loss: 312.107269  [20480/99840], accuracy 93.43% [19134/20480]
training loss: 306.911713  [23040/99840], accuracy 93.39% [21517/23040]
training loss: 304.168457  [25600/99840], accuracy 93.46% [23927/25600]
training loss: 310.124329  [28160/99840], accuracy 93.45% [26315/28160]
training loss: 307.557953  [30720/99840], accuracy 93.45% [28707/30720]
training loss: 305.799194  [33280/99840], accuracy 93.47% [31107/33280]
training loss: 303.616974  [35840/99840], accuracy 93.45% [33494/35840]
training loss: 304.912476  [38400/99840], accuracy 93.40% [35867/38400]
training loss: 308.345398  [40960/99840], accuracy 93.45% [38276/40960]
training loss: 301.784027  [43520/99840], accuracy 93.46% [40674/43520]
training loss: 307.919983  [46080/99840], accuracy 93.42% [43047/46080]
training loss: 305.897308  [48640/99840], accuracy 93.41% [45433/48640]
training loss: 303.216797  [51200/99840], accuracy 93.45% [47847/51200]
training loss: 308.406982  [53760/99840], accuracy 93.48% [50256/53760]
training loss: 303.478729  [56320/99840], accuracy 93.51% [52666/56320]
training loss: 303.652740  [58880/99840], accuracy 93.49% [55049/58880]
training loss: 306.142517  [61440/99840], accuracy 93.52% [57459/61440]
training loss: 305.353729  [64000/99840], accuracy 93.50% [59843/64000]
training loss: 309.558197  [66560/99840], accuracy 93.49% [62224/66560]
training loss: 306.580780  [69120/99840], accuracy 93.49% [64623/69120]
training loss: 307.973297  [71680/99840], accuracy 93.47% [67000/71680]
training loss: 305.949402  [74240/99840], accuracy 93.46% [69384/74240]
training loss: 305.829224  [76800/99840], accuracy 93.47% [71782/76800]
training loss: 305.612671  [79360/99840], accuracy 93.44% [74156/79360]
training loss: 309.399231  [81920/99840], accuracy 93.43% [76536/81920]
training loss: 305.019958  [84480/99840], accuracy 93.41% [78913/84480]
training loss: 306.941772  [87040/99840], accuracy 93.41% [81305/87040]
training loss: 304.592072  [89600/99840], accuracy 93.42% [83701/89600]
training loss: 308.753357  [92160/99840], accuracy 93.40% [86079/92160]
training loss: 309.320953  [94720/99840], accuracy 93.41% [88475/94720]
training loss: 305.772858  [97280/99840], accuracy 93.41% [90869/97280]
training loss: 304.889191  [99840/99840], accuracy 93.42% [93271/99840]
training avg loss: 2.394870  [99840/99840]
training accuracy: 93.42% [93271/99840]
validation avg loss: 2.411556
validation accuracy: 91.44% [22823/24960]

saving model

Epoch 28
training loss: 306.081909  [ 2560/99840], accuracy 93.01% [ 2381/ 2560]
training loss: 313.601166  [ 5120/99840], accuracy 93.42% [ 4783/ 5120]
training loss: 309.202393  [ 7680/99840], accuracy 93.35% [ 7169/ 7680]
training loss: 307.206604  [10240/99840], accuracy 93.18% [ 9542/10240]
training loss: 304.646362  [12800/99840], accuracy 93.35% [11949/12800]
training loss: 305.021393  [15360/99840], accuracy 93.35% [14339/15360]
training loss: 302.412323  [17920/99840], accuracy 93.44% [16744/17920]
training loss: 305.675171  [20480/99840], accuracy 93.33% [19114/20480]
training loss: 306.259399  [23040/99840], accuracy 93.47% [21535/23040]
training loss: 305.068176  [25600/99840], accuracy 93.49% [23933/25600]
training loss: 308.717560  [28160/99840], accuracy 93.43% [26311/28160]
training loss: 310.900543  [30720/99840], accuracy 93.45% [28708/30720]
training loss: 309.932159  [33280/99840], accuracy 93.43% [31093/33280]
training loss: 307.716339  [35840/99840], accuracy 93.45% [33494/35840]
training loss: 304.500031  [38400/99840], accuracy 93.43% [35879/38400]
training loss: 302.835236  [40960/99840], accuracy 93.45% [38277/40960]
training loss: 305.965454  [43520/99840], accuracy 93.49% [40689/43520]
training loss: 307.760315  [46080/99840], accuracy 93.44% [43057/46080]
training loss: 304.627991  [48640/99840], accuracy 93.48% [45471/48640]
training loss: 311.684143  [51200/99840], accuracy 93.51% [47877/51200]
training loss: 308.515137  [53760/99840], accuracy 93.53% [50284/53760]
training loss: 305.453522  [56320/99840], accuracy 93.53% [52677/56320]
training loss: 306.909973  [58880/99840], accuracy 93.54% [55074/58880]
training loss: 316.918030  [61440/99840], accuracy 93.49% [57441/61440]
training loss: 308.427612  [64000/99840], accuracy 93.47% [59823/64000]
training loss: 302.474579  [66560/99840], accuracy 93.50% [62236/66560]
training loss: 304.907898  [69120/99840], accuracy 93.52% [64643/69120]
training loss: 306.104126  [71680/99840], accuracy 93.53% [67040/71680]
training loss: 302.576355  [74240/99840], accuracy 93.56% [69457/74240]
training loss: 303.845642  [76800/99840], accuracy 93.58% [71866/76800]
training loss: 300.692627  [79360/99840], accuracy 93.60% [74277/79360]
training loss: 304.724823  [81920/99840], accuracy 93.59% [76668/81920]
training loss: 308.327087  [84480/99840], accuracy 93.58% [79056/84480]
training loss: 308.086792  [87040/99840], accuracy 93.60% [81467/87040]
training loss: 307.172882  [89600/99840], accuracy 93.59% [83859/89600]
training loss: 307.007599  [92160/99840], accuracy 93.58% [86245/92160]
training loss: 305.552856  [94720/99840], accuracy 93.58% [88640/94720]
training loss: 303.597290  [97280/99840], accuracy 93.58% [91034/97280]
training loss: 300.373657  [99840/99840], accuracy 93.58% [93430/99840]
training avg loss: 2.393016  [99840/99840]
training accuracy: 93.58% [93430/99840]
validation avg loss: 2.411274
validation accuracy: 91.43% [22822/24960]

saving model

Epoch 29
training loss: 310.637115  [ 2560/99840], accuracy 93.75% [ 2400/ 2560]
training loss: 304.245453  [ 5120/99840], accuracy 93.61% [ 4793/ 5120]
training loss: 310.979950  [ 7680/99840], accuracy 93.54% [ 7184/ 7680]
training loss: 307.592957  [10240/99840], accuracy 93.64% [ 9589/10240]
training loss: 305.438690  [12800/99840], accuracy 93.52% [11971/12800]
training loss: 306.320343  [15360/99840], accuracy 93.50% [14361/15360]
training loss: 303.847107  [17920/99840], accuracy 93.63% [16779/17920]
training loss: 308.969330  [20480/99840], accuracy 93.71% [19192/20480]
training loss: 301.370941  [23040/99840], accuracy 93.76% [21603/23040]
training loss: 304.699615  [25600/99840], accuracy 93.74% [23998/25600]
training loss: 306.303650  [28160/99840], accuracy 93.76% [26404/28160]
training loss: 308.740723  [30720/99840], accuracy 93.78% [28809/30720]
training loss: 306.725800  [33280/99840], accuracy 93.77% [31206/33280]
training loss: 303.018951  [35840/99840], accuracy 93.77% [33608/35840]
training loss: 306.288452  [38400/99840], accuracy 93.77% [36008/38400]
training loss: 304.770416  [40960/99840], accuracy 93.74% [38396/40960]
training loss: 305.838989  [43520/99840], accuracy 93.77% [40809/43520]
training loss: 310.654602  [46080/99840], accuracy 93.77% [43208/46080]
training loss: 302.706696  [48640/99840], accuracy 93.80% [45623/48640]
training loss: 298.933594  [51200/99840], accuracy 93.82% [48035/51200]
training loss: 306.563019  [53760/99840], accuracy 93.81% [50434/53760]
training loss: 303.880798  [56320/99840], accuracy 93.80% [52829/56320]
training loss: 303.171722  [58880/99840], accuracy 93.80% [55229/58880]
training loss: 306.732971  [61440/99840], accuracy 93.78% [57616/61440]
training loss: 301.134918  [64000/99840], accuracy 93.75% [60003/64000]
training loss: 303.694672  [66560/99840], accuracy 93.76% [62407/66560]
training loss: 303.404541  [69120/99840], accuracy 93.77% [64816/69120]
training loss: 307.143005  [71680/99840], accuracy 93.78% [67225/71680]
training loss: 311.825439  [74240/99840], accuracy 93.76% [69604/74240]
training loss: 304.570801  [76800/99840], accuracy 93.74% [71996/76800]
training loss: 304.671082  [79360/99840], accuracy 93.75% [74401/79360]
training loss: 307.654236  [81920/99840], accuracy 93.77% [76815/81920]
training loss: 305.859100  [84480/99840], accuracy 93.75% [79202/84480]
training loss: 306.550751  [87040/99840], accuracy 93.74% [81591/87040]
training loss: 308.158264  [89600/99840], accuracy 93.73% [83985/89600]
training loss: 314.286224  [92160/99840], accuracy 93.73% [86382/92160]
training loss: 302.409637  [94720/99840], accuracy 93.74% [88795/94720]
training loss: 300.633362  [97280/99840], accuracy 93.74% [91193/97280]
training loss: 309.143860  [99840/99840], accuracy 93.72% [93575/99840]
training avg loss: 2.391279  [99840/99840]
training accuracy: 93.72% [93575/99840]
validation avg loss: 2.410733
validation accuracy: 91.47% [22832/24960]

saving model

No description has been provided for this image

**** Running model on the testing dataset ****
Test total loss: 50171.11458516121
Test avg loss: 2.412072816594289
Test accuracy: 91.37% [19005/20800]
No description has been provided for this image
No description has been provided for this image

You can see above that this model ends with ~94% accuracy on the test set and ~91.5% accuracy on the validation set. From the examples above, it performs decently well on a lot of different examples. The training/validation loss curves are pretty close to aligned. It gets ~91% on test accuracy and performs decently well over all the characters. There is likely some room for improvement with the model, but overall it seems to generalize well. Compared to the first model I trained, this one has a slightly higher test accuracy. You can see below that on the handwritten examples it gets the "go utes" example correct but does slightly worse on the other two handwritten examples. It misses about 4-5 characters on those. For example in the "ovaltine" image below it predicts an 'i' as a 'j' and an 'i' as a 't'. in On the font that looks more like handwriting it correctly predicts 164/183 characters, which is lower than the pretrained model and the model I trained above. On the other typed fonts it performs similar to the pretrained model but slightly worse, and so it doesn't do a good job at classifying those. Probably the way to improve performance on other fonts would be to have typed characters in the dataset. I believe the dataset is mainly handwritten characters so that would definitely improve performance. Overall, this model performs similar to the first model I trained and the pretrained model, but it is the worst out the three models. The model I trained above has better performance.

In [35]:
out = image_transcription(test_images[0], test_labels[0], test_labels_spaces[0], TEST_PATH, test_filenames[0], model)
Actual label:                   BESURETODRINKYOUROVALTINE
Predicted label without spaces: BESURETODRJNKYOUROYALTTNE
Accuracy: (22/25)


Actual label:                   BE SURE TO DRINK YOUR OVALTINE
Predicted label with spaces:    BE SURE TO DRJNK YOUR OYALTTNE
Accuracy: (27/30)

No description has been provided for this image
No description has been provided for this image
In [36]:
out = image_transcription(test_images[1], test_labels[1], test_labels_spaces[1], TEST_PATH, test_filenames[1], model)
Actual label:                   GOUTES
Predicted label without spaces: GOUTES
Accuracy: (6/6)


Actual label:                   GO UTES
Predicted label with spaces:    GO UTES
Accuracy: (7/7)

No description has been provided for this image
No description has been provided for this image
In [37]:
out = image_transcription(test_images[2], test_labels[2], test_labels_spaces[2], TEST_PATH, test_filenames[2], model)
Actual label:                   DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION
Predicted label without spaces: DREAMBLGFORDREAMSLGNLTEPOSSLBLLLTYCHASEYOURPASSLONSWLTHUNWAVERLNGDETERMLNATLONBELLEVELNYOURSELFFORYOUARECAPABLEOFEXTRAORDLNARYTHLNGSREMEMBERTHATTHEJOURNEYLSASLMPORTANTASTHEDESTLNATLON
Accuracy: (164/183)


Actual label:                   DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION
Predicted label with spaces:    DREAM BLG FOR DREAMS LGNLTE POSSLBLLLTY CHASE YOUR PASSLONS WLTH UNWAVERLNG DETERMLNATLON BELLEVE LN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDLNARY THLNGS REMEMBER THAT THE JOURNEY LS AS LMPORTANT AS THE DESTLNATLON
Accuracy: (195/214)

No description has been provided for this image
No description has been provided for this image
In [38]:
out = image_transcription(test_images[3], test_labels[3], test_labels_spaces[3], TEST_PATH, test_filenames[3], model)
Actual label:                   EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH
Predicted label without spaces: EVERYMDMENTTSAFRESHBEGTNNTNGANEWSTARTANEWPATH
Accuracy: (41/45)


Actual label:                   EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH
Predicted label with spaces:    EVERY MDMENT TS A FRESH BEGTNNTNG A NEW START A NEW PATH
Accuracy: (52/56)

No description has been provided for this image
No description has been provided for this image
In [39]:
out = image_transcription(test_images[4], test_labels[4], test_labels_spaces[4], TEST_PATH, test_filenames[4], model)
Actual label:                   LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH
Predicted label without spaces: LOWCDRBOHXURXELLRDJBTSHDVEBFCRJOMJFLXCRBASJXGUXPOPUBDRSUPPORTBRSHCUAJMTRHKTXARBXOGTABLXMORBFFFBCTJVBJHAXCJRJRHJFRDLJFXSFORWBJGHTJCJSSDXUPROVLUBORRHBRHBDJTHBBXFTJYTSSUTNXJJHCHASLJOWJFRBLJCJODPRKSSURBDXDLMPROVKUCYHOJJBSTBROUJTJBVJFJJSUHOWBVBTPSHUNQBDOJCYTORSBBBJBVTBWFJFSTJXTJUJBGSNCDRRTJPOXBNTLDLLOXGTTBRWHFALJTHRLSKSAREVJTBVLOFXHBDVDJLJABLJFRKTSHBDRCHLJXFRDTURBJXULCYXGRTBSTHDTLNWCDRBOHXURXXBDJFTTTJSDRJFHLGHLXKFFBCTJVBFORSTJORTTERMWTTJLGHTGOSSBLJYTGHATXHJGGRJJOYRRLGRBRMBFFJFCTXVTTNFSSLSXOYTSLGXLFLCDXTLXRJJLGRBATBRTHDXOTHBRJCOMMOXULBRRPLDXTSXHEXRLOXCRXFNKMTHJJBFFBCXSOXJCTJOLJJFSTEROLLKVFLSAXUBJJOOUPRBSSURERTABUXKNOWXRBSJFDRCHULTFRAGURFSUTGRTKRJSHXSLSOMEPORREXXLDBFORXEYGAJLVBHBDJLTHOUTCOMBSDSYHSOCJLATBUWLJTHJXCREDSBUJCOXSUMPXLOXOFSATLJRDTJFDFDTTHLSCYOXCJJUSLOXPOJNTSLTOGTHBJMPORTAXCJFOTNFOLJLOVLLNCABDJDXCBUMODRBRDTBDLFTDPPROPRJAXBFORXHTBFXJJLVLUUTJJJALASWJFLLDSUTHFUNBJFDFORFURRRHBRRJFSHJFARCH
Accuracy: (37/765)


Actual label:                   LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH
Predicted label with spaces:    LO W C DRBO HXUR XE L LR D J BTS H DVE BFCRJO M JF LXC RBASJXGUX POPUBDR SUPPORTBRSH CUAJM TRHK TX ARB X OGTABLX M ORB FFFBCTJVB JH AX CJR J RH JFR DLJFXS FOR W BJG HT JCJSS DX U PR OVLUB O RR HBR HBDJT H BBXFTJYTS SUT N X J J H C H AS LJO W JFR BLJCJO D PRKSSU RB DX D LM PR OVKU CYH OJJBSTBROU J TJBV JFJJSU H O W BVBTP SH UNQB D O JC YTORS BBBJBV TB WFJFS T JXTJ UJBGS NC DRR TJ POXBNTLDL LO XG T TBR W HF ALJTH RLSKS ARE VJTB VL OF XHB DVDJLJABLJF RK TSH BDRC H LJXFRDTU RB JX ULCYXGRTBS TH DT LN W C DRBO HXURXXB DJFTT T J S DR JF HLG HLX KFFBCTJVB FOR STJO RT TER M WTTJLG HT GOSS BLJYTGH AT XH JGGR JJO Y RR L G RBR M BFF JFCTXVTTNFSS LS X OYTSLG XLFLC DXTLX R J J L G RBATBR TH DX OTHBR JC O M M O X ULBRR PLDX TS XHEXR LO XC RXFNK M T H J J BFFBCXS O X JCTJOLJJFSTER OL LKVFLS AX U BJJO O U PRBSSU RE R T A B U XK N O W X RBS JF DRC H ULTFRAGU RF SUTGRTKRJ SH XSL SO ME PO RR EXXLDB FO R XE YG AJLVB HBDJLTH OUTC O MBS DS Y H SOCJLATBU WLJTH JXC REDSBU JC O XSU MPXLO X OF SATLJRDT JF D FDT THLS CYO XCJJUSLO X P OJNTSL TO GTHB JMPORTAXC JF OTN FOLJLO VL LNC A BDJDXCBU M O D RBRDTB DLFT DPPR OPRJAXB FO R XH TB FXJJLVLUUT J J J AL AS W JFLL DSU THFU NB JF D FOR FU RRR HBR R JFSH JF ARC H
Accuracy: (89/895)

No description has been provided for this image
No description has been provided for this image
In [40]:
out = image_transcription(test_images[5], test_labels[5], test_labels_spaces[5], TEST_PATH, test_filenames[5], model)
Actual label:                   YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED
Predicted label without spaces: XOUWJUJFACBMANXDBFBATSQNYLFBBUTNBVBRJBRYOURSBJFBBDBFBATBD
Accuracy: (34/57)


Actual label:                   YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED
Predicted label with spaces:    XOU WJUJ FACB MANX DBFBATS QN YLFB BUT NBVBR JBR YOURSBJF BB DBFBATBD
Accuracy: (46/69)

No description has been provided for this image
No description has been provided for this image
In [41]:
out = image_transcription(test_images[6], test_labels[6], test_labels_spaces[6], TEST_PATH, test_filenames[6], model)
Actual label:                   ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS
Predicted label without spaces: ABSTRACTAUDLOPDTTERXRBCOGXJTJOXLSAXLMPORTDXTRBSFRCHTOPLCJXTHEMDYJDCHLXFDTDRXLXGDRTDANDLXCLJUDBSSBVBRALTARSKSSUCHASAUDLOTDTGGLXGACOUSGLCSCTJBXBCBDSSLFLCDTLOXDXDSOUXDEVTJFXTDTBCTJOXRBCBXTLXXBURADXBRRWORKSHAVBBBBXAPPLQBDTOSOLVBAUDJOPDTTJFRXRFCOTGXLTJOXPROBLMPRTJBSHOWEVJFRJFVLOUSSXSTBMSFOCUSOXSMAULDATDSTJFTSNHLCHLLMLRFSTHBPFRFORMDXCJTOFAUDLOPATTBRXRBCOGXQJLOXSXSHTBMS
Accuracy: (48/345)


Actual label:                   ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS
Predicted label with spaces:    ABSTRACT AUDLO PDTTERX RBCOGXJTJOX LS AX LMPORTDXT RBSF RCH TOPLC JX THE MD Y JD C HLXF DTDRXLXG DRTD AND LXCLJUDBS SBVBRAL TARSKS SUCH AS AUDLO TD TGGLXG ACOUSGLC SC T JBXB CBDSSLFLCDTLOX DXD SOUXD EV T JFXT DT BCTJOX RBCBXTLX XBURAD XBRRW ORKS HAVB BBBX APPLQBD TO SOLVB AUDJO PDTTJFRX RFCO TGXLTJOX PROBL M PR T J B S HOWEVJFR JFVLOUS SXSTBMS FOCUS OX SMAUL DATDS T JFTS N HLCH LLMLRFS THB PFRFORMDXCJT OF AUDLO PATTBRX RBCOGXQJLOX SXSHTBMS
Accuracy: (182/401)

No description has been provided for this image
No description has been provided for this image
In [ ]: